RegistryObjectImpl クラスを拡張した、実装に固有の AdhocQueryImpl クラスを使用すると、Service Registry に保存されているクエリーを呼び出すことができます。Service Registry には、呼び出し可能なデフォルトの AdhocQueryImpl オブジェクトがいくつかあります。最も役に立つのは FindAllMyObjects と GetCallersUser です。
FindAllMyObjects は、「発行したオブジェクトの検索」で説明されている QueryManager.getRegistryObjects() メソッドと同等の働きをします。
GetCallersUser は、「私は誰ですか」という質問と同じです。このクエリーは、それを実行したクライアントに関連付けられている User オブジェクトを返します。呼び出し元が Service Registry にログインしていない場合、このクエリーは「Registry Guest」という名前のユーザーを返します。
ストアドクエリーを見つける最も簡単な方法は、一意の識別子でクエリーを検索することです。GetCallersUser クエリーには、このクエリー用に定義された標準的な定数がありますので「ストアドクエリーに対する定数」を参照してください。標準的な定数を持たないクエリーは、一意の識別子の文字列値を使用して検索できます。
String queryId = CanonicalConstants.CANONICAL_QUERY_GetCallersUser; AdhocQueryImpl aq = (AdhocQueryImpl) bqm.getRegistryObject(queryId);
次に、AdhocQuery に関連付けられているクエリー文字列を取得し、その文字列を使用してクエリーを作成して実行します。これには DeclarativeQueryManager のメソッドを使用します。
if (aq != null) { int qType = aq.getType(); String qString = aq.toString(); Query query = dqm.createQuery(qType, qString); BulkResponse br = dqm.executeQuery(query); Collection objects = br.getCollection(); ...
ストアドクエリーの使用例については、<INSTALL>/registry/samples/query-stored/src ディレクトリにある JAXRQueryStored.java を参照してください。このサンプルは、ユーザーを認証し、そのユーザーのレジストリログイン名を返します。