Ejemplo: Utilización de la interfaz remota para la consulta dinámica

Al ejecutar una consulta dinámica EJB (Enterprise JavaBeans) mediante la interfaz remota, se llama al método executeQuery de la interfaz Query. El método executeQuery tiene un atributo de transacción de REQUIRED para esta interfaz; por tanto, no es necesario establecer explícitamente un contexto de transacción para poder ejecutar la consulta.

Empiece con las sentencias de importación siguientes:

import com.ibm.websphere.ejbquery.QueryHome;
import com.ibm.websphere.ejbquery.Query;
import com.ibm.websphere.ejbquery.QueryIterator;
import com.ibm.websphere.ejbquery.IQueryTuple;
import com.ibm.websphere.ejbquery.QueryException;

A continuación, escriba la sentencia de consulta como una serie, como en el ejemplo siguiente que recupera los nombres y las referencias EJB para empleados con un sueldo bajo:

String query = 
"select e.name as name , object(e) as emp from EmpBean e where e.salary < 50000"; 

Cree un objeto Query obteniendo una referencia de la clase QueryHome (esta clase define el método executeQuery method). Tenga en cuenta que por motivos de simplicidad, en el ejemplo siguiente se utiliza el nombre JNDI de la consulta dinámica para el objeto Query:

InitialContext ic = new InitialContext(); 

Object obj =  ic.lookup("com/ibm/websphere/ejbquery/Query");

QueryHome  qh = 
 ( QueryHome) javax.rmi.PortableRemoteObject.narrow( obj, QueryHome.class );
Query qb = qh.create();

A continuación, especifique un tamaño máximo para el conjunto de resultados de la consulta, que se define en el objeto QueryIterator. A continuación, debe especificar un tamaño máximo para el conjunto de resultados de la consulta, que se define en el objeto QueryIterator que se incluye en el paquete de la API QueryIterator. Este ejemplo establece el tamaño máximo del conjunto de resultados en 99:

QueryIterator it = qb.executeQuery(query, null, null ,0, 99 );
El iterador contiene una colección de objetos IQueryTuple, que son registros de los valores de recopilación devueltos Según los criterios de la sentencia de consulta del ejemplo, cada tupla de este caso práctico contiene un valor name y un valor object(e). Para visualizar el contenido del resultado de esta consulta, utilice el código siguiente:
while (it.hasNext() ) { 
	IQueryTuple tuple = (IQueryTuple) it.next();
	System.out.print( it.getFieldName(1) );
	String s = (String) tuple.getObject(1);
	System.out.println( s);
	System.out.println( it.getFieldName(2) );
	Emp e = ( Emp) javax.rmi.PortableRemoteObject.narrow( tuple.getObject(2), Emp.class );
	System.out.println( e.getPrimaryKey().toString());
}
La salida del programa puede ser similar a la siguiente:
name Bob 
emp 1001
name Dave
emp 298003
...
Finalmente, capture y procese las excepciones. Es posible que se genere una excepción si se produce un error de sintaxis en la sentencia de la consulta o un error de proceso durante la ejecución. El ejemplo siguiente captura y procesa estas excepciones:
} catch (QueryException qe) {
    System.out.println("Query Exception "+ qe.getMessage() );
}

Manejo de grandes recopilaciones de resultados para la consulta de la interfaz remota

Si quiere que la consulta devuelva una gran recopilación de resultados, tiene la opción de programarla para que devuelva resultados en múltiplos más pequeños, en cantidades más manejables. Utilice los parámetros skipRow y maxRow en el método remoto executeQuery para recuperar la respuesta en chunks. Por ejemplo:

int skipRow=0;
int maxRow=100;
QueryIterator it = null;
do {
	it = qb.executeQuery(query, null, null ,skipRow, maxRow );
	while (it.hasNext() ) { 
	// display result 
	skipRow = skipRow + maxRow;
}
} while ( ! it.isComplete() ) ;

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xque_remoteclient
File name: xque_remoteclient.html