예제: 동적 조회에 대한 로컬 인터페이스 사용

로컬 인터페이스를 사용하여 동적 EJB(Enterprise JavaBeans) 조회를 실행할 때 QueryLocal 인터페이스에서 executeQuery 메소드를 호출합니다. 이 인터페이스는 메소드에 대한 트랜잭션을 초기화하지 않습니다. 그러므로 실행할 조회에 대한 트랜잭션 컨텍스트를 명시적으로 설정해야 합니다.

참고: 트랜잭션 컨텍스트를 설정하기 위해 다음 예제는 begin() 및 commit() 메소드를 호출합니다. 이러한 메소드 사용에 대한 대안으로, 트랜잭션 컨텍스트 내에서 실행되는 EJB 메소드 내에서 간단하게 조회 코드를 임베드하면 됩니다.

다음 가져오기 구문으로 조회 코드를 시작하십시오.

import com.ibm.websphere.ejbquery.QueryLocalHome;
import com.ibm.websphere.ejbquery.QueryLocal;
import com.ibm.websphere.ejbquery.QueryLocalIterator;
import com.ibm.websphere.ejbquery.IQueryTuple;
import com.ibm.websphere.ejbquery.QueryException;

그런 다음, 다음 예제가 급료가 낮은 직원 이름과 EJB 참조를 가져올 때 문자열 양식에 조회문을 기록하십시오.

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

QueryLocalHome 클래스에서 참조를 가져와 QueryLocal 오브젝트를 작성하십시오. (이 클래스는 executeQuery 메소드를 정의합니다.) 다음 예제에서는 ejb/query가 동적 조회 JNDI 이름(com/ibm/websphere/ejbquery/Query)을 가리키는 로컬 EJB 참조로 사용됩니다.

InitialContext ic = new InitialContext();
   QueryLocalHome  qh =  ( LocalQueryHome) ic.lookup( "java:comp/env/ejb/query" );
QueryLocal qb = qh.create();

코드의 마지막 부분은 트랜잭션을 초기화하고, executeQuery 메소드를 호출하고, 조회 결과를 표시합니다. QueryLocalIterator 클래스는 조회 결과 세트를 정의하기 때문에 인스턴스화됩니다. 이 클래스는 클래스 QueryIterator API 패키지에 포함되어 있습니다. 반복기는 트랜잭션 마지막에서 유효성을 상실합니다. 그러므로 동일한 트랜잭션 범위에서 반복기를 executeQuery 호출로 사용해야 합니다.

userTransaction.begin();
QueryLocalIterator it = qb.executeQuery(query, null, null);
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) );
	EmpLocal e = ( EmpLocal ) tuple.getObject(2);
	System.out.println( e.getPrimaryKey().toString());
}
userTransaction.commit();

대부분의 경우 QueryLocalIterator 오브젝트는 수요 주도형 입니다. 즉, 데이터가 점진적으로 리턴되기 때문에 데이터베이스에서 각 레코드를 가져올 때 next() 메소드가 반복기에서 호출되어야 합니다. (반복기가 수요 주도형이 아닌 경우도 있습니다. 자세한 정보는 동적 조회 성능 고려 주제의 "로컬 조회 인터페이스" 하위 절을 참조하십시오.)

전체 조회 결과 세트는 애플리케이션 서버 메모리에서 점진적으로 구체화되기 때문에 크기를 쉽게 조절할 수 있습니다. 예를 들어, 테스트 실행 시 조회 결과의 일부 튜플만 리턴할 필요가 있다는 것을 결정해야 합니다. 이 경우 조회 루프를 닫기 위해 QueryLocalIterator 오브젝트에서 close() 메소드 호출을 사용할 수 있습니다. 이렇게 하면 반복기가 사용하는 SQL 자원을 활용할 수 있습니다. 그렇지 않으면 메모리 또는 트랜잭션 끝에서 전체 결과 세트를 계산하기 전까지 자원을 사용할 수 없습니다.


주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xque_localclient
파일 이름:xque_localclient.html