예제: 동적 조회에 원격 인터페이스 사용
원격 인터페이스를 사용하여 동적 EJB(Enterprise JavaBeans) 조회를 실행할 때 조회 인터페이스에서 executeQuery 메소드를 호출합니다. executeQuery 메소드는 이 인터페이스에 대한 REQUIRED 트랜잭션 속성을 가지고 있습니다. 그러므로 실행할 조회에 대한 정확한 변환 컨텍스트를 구현할 필요는 없습니다.
다음 가져오기 문을 시작하십시오.
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;
그런 다음, 다음 예제가 급료가 낮은 직원 이름과 EJB 참조를 가져올 때 문자열 양식에 조회문을 기록하십시오.
String query = "select e.name as name , object(e) as emp from EmpBean e where e.salary < 50000";
QueryHome 클래스에서 참조를 가져와 Query 오브젝트를 작성하십시오. (이 클래스는 executeQuery 메소드를 정의합니다.) 단순화하기 위해 다음 예제는 Query 오브젝트에 대한 동적 조회 JNDI 이름을 사용합니다.
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();
그런 다음, QueryIterator 오브젝트(QueryIterator 클래스에 있음)에 정의되는 조회 결과 세트의 최대 크기를 지정해야 합니다. 이 클래스는 QueryIterator API 패키지 내에 포함됩니다. 다음으로 QueryIterator 오브젝트(QueryIterator API 패키지에 있음)에 정의되는 조회 결과 세트의 최대 크기를 지정해야 합니다. 이 예제는 결과 세트의 최대 크기를 99로 지정합니다.
QueryIterator it = qb.executeQuery(query, null, null ,0, 99 );
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()); }
name Bob emp 1001 name Dave emp 298003 ...
} catch (QueryException qe) { System.out.println("Query Exception "+ qe.getMessage() ); }
원격 인터페이스 조회에 대한 큰 결과 콜렉션 처리
조회를 큰 콜렉션에 리턴하려면, 결과를 더 관리 가능한 수량으로 나누어 작은 여러 부분으로 리턴하는 프로그래밍 옵션을 사용할 수 있습니다. 답변을 청크로 가져오려면 원격 executeQuery 메소드에서 skipRow 및 maxRow 매개변수를 사용하십시오. 예를 들어 다음과 같습니다.
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() ) ;