クエリーを実行している対象のレジストリが、1 つまたは複数のレジストリ連携 (「レジストリとリポジトリについて」を参照) の一部である場合、そのレジストリメンバーとして含んでいるすべての連携内のすべてのレジストリに対して、あるいは 1 つの連携内のすべてのレジストリに対して、宣言型クエリーを実行できます。
レジストリをメンバーとして含んでいるすべての連携内のすべてのレジストリに対してクエリーを実行するには、実装に固有の setFederated メソッドを QueryImpl オブジェクトに対して呼び出します。このメソッドのシグニチャーは次のとおりです。
public void setFederated(boolean federated) throws JAXRException
このメソッドを次のように呼び出します。
QueryImpl query = (QueryImpl) dqm.createQuery(Query.QUERY_TYPE_SQL, qString); query.setFederated(true);
レジストリが 1 つの連携だけのメンバーであることがわかっている場合、クエリーを実行する前に呼び出す必要があるのはこのメソッドだけです。
1 つの連携内のレジストリにクエリーを限定するには、実装に固有の setFederation メソッドも追加で呼び出す必要があります。このメソッドは、クエリーを実行する連携の一意識別子を引数として取ります。
public void setFederation(java.lang.String federationId) throws JAXRException
したがって、このメソッドを呼び出す前に、一意の識別子の値を取得する必要があります。通常、これは既知の値です。
次に、クエリーを作成し、setFederated と setFederation を呼び出し、クエリーを実行します。
QueryImpl query = (QueryImpl) dqm.createQuery(Query.QUERY_TYPE_SQL, qString); query.setFederated(true); query.setFederation(fedId); response = dqm.executeQuery(query);
連携クエリーの使用例についてはINSTALL/registry-samples/query-federation/src ディレクトリにある JAXRQueryFederation.java を参照してください。このサンプルは、見つかった各連携 (Service Registry に付属のデータベースに 1 つだけ含まれている) に対して、宣言型クエリーとストアドクエリーを実行します。Service Registry データベースに格納されている連携は、既知の識別子値ではないため、サンプルでは findObjects を使用して連携を検索しています。
宣言型クエリーは、「宣言型クエリーの使用: 例」で実行したものです。ストアドクエリーは FindAllMyObjects クエリーです。
Service Registry データベースの連携にはメンバーがないため、このサンプルではクエリーを実行できません。