例: 動的照会のためのリモート・インターフェースの使用

リモート・インターフェースを使用して動的 Enterprise JavaBeans (EJB) 照会を実行する場合は、 Query インターフェースで executeQuery メソッドを呼び出します。 executeQuery メソッドにはこのインターフェース用の必須トランザクション属性があります。 このため、照会を実行するためにトランザクション・コンテキストを明示的に確立する必要がありません。

以下のインポート・ステートメントで始めます。

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 オブジェクトで定義されます。このクラスは、QueryIterator API パッケージに含まれています。 この例では結果セットの最大サイズを 99 に設定しています。

QueryIterator it = qb.executeQuery(query, null, null ,0, 99 );
イテレーターには IQueryTuple オブジェクトのコレクションが含まれています。これらは戻り値のコレクションのレコードです。 照会ステートメントの例の基準に対応して、このシナリオの各タプルには name の値と object(e) の値がそれぞれ 1 つ含まれています。 この照会結果の内容を表示するには、次のコードを使用します。
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() ) ;

トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xque_remoteclient
ファイル名:xque_remoteclient.html