5.3. リモートクエリー
リモートクエリーを実行するとき、cacheManager は
RemoteCacheManager のインスタンスである必要があります。Java および blueprint.xml で RemoteCacheManager を使用する設定例を以下に示します。
Java のみを使用
from("direct:start")
.setHeader(InfinispanConstants.OPERATION, InfinispanConstants.QUERY)
.setHeader(InfinispanConstants.QUERY_BUILDER,
new InfinispanQueryBuilder() {
public Query build(QueryFactory<Query> queryFactory) {
return queryFactory.from(User.class).having("name").like("%abc%")
.toBuilder().build();
}
})
.to("infinispan://localhost?cacheContainer=#cacheManager&cacheName=remote_query_cache") ;
Blueprint および Java を使用
Java RemoteCacheManagerFactory クラス:
public class RemoteCacheManagerFactory {
ConfigurationBuilder clientBuilder;
public RemoteCacheManagerFactory(String hostname, int port) {
clientBuilder = new ConfigurationBuilder();
clientBuilder.addServer()
.host(hostname).port(port);
}
public RemoteCacheManager newRemoteCacheManager() {
return new RemoteCacheManager(clientBuilder.build());
}
}
InfinispanQueryExample クラス:
public class InfinispanQueryExample {
public InfinispanQueryBuilder getBuilder() {
return new InfinispanQueryBuilder() {
public Query build(QueryFactory<Query> queryFactory) {
return queryFactory.from(User.class)
.having("name")
.like("%abc%")
.toBuilder().build();
}
}
}
}
<bean id=”remoteCacheManagerFactory” class=“com.jboss.datagrid.RemoteCacheManagerFactory”>
<argument value=”localhost”/>
<argument value="11222”/>
</bean>
<bean id=”cacheManager”
factory-ref=”remoteCacheManagerFactory”
factory-method=“newRemoteCacheManager”>
</bean>
<bean id="queryBuilder" class="org.example.com.InfinispanQueryExample"/>
<camelContext id="route" xmlns="http://camel.apache.org/schema/blueprint">
<route>
<from uri="direct:start"/>
<setHeader headerName="CamelInfinispanOperation">
<constant>CamelInfinispanOperationQuery</constant>
</setHeader>
<setHeader headerName="CamelInfinispanQueryBuilder">
<method ref="queryBuilder" method="getBuilder"/>
</setHeader>
<to uri="infinispan://localhost?cacheContainer=#cacheManager&cacheName=remote_query_cache"/>
</route>
</camelContext>
remote_query_cache は、データを保持するキャッシュの任意名で、クエリーの結果は CamelInfinispanOperationResult ヘッダーとして保存されるドメインオブジェクトのリストになります。
さらに、要件を以下に示します。
RemoteCacheManagerはProtoStreamMarshallerを使用するよう設定される必要があります。ProtoStreamMarshallerはRemoteCacheManagerのシリアライズコンテキストで登録される必要があります。- ドメインオブジェクトの .proto 記述子はリモート JBoss Data Grid サーバーで登録される必要があります。
RemoteCacheManager の設定方法の詳細は、『Red Hat JBoss Data Grid Infinispan Query Guide』 の Remote Querying の項を参照してください。