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()); } }Java
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(); } } } }blueprint.xml:
<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
の項を参照してください。