5.5. リモートキャッシュのカスタムリスナー
リモートキャッシュのカスタムリスナーは、埋め込みキャッシュと同様に登録できますが、
sync=false
が存在する必要があります。例を以下に示します。
Java のみを使用
from(infinispan://?cacheContainer=#cacheManager&sync=false&customListener=#myCustomListener") .to(mock:result);
Blueprint および Java を使用
Java クラス:
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()); } }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="myCustomListener" class="org.example.com.CustomListener"/> <camelContext id="route" xmlns="http://camel.apache.org/schema/blueprint"> <route> <from uri="infinispan://?cacheContainer=#cacheManager&sync=false&customListener=#myCustomListener"/> <to uri="mock:result"/> </route> </camelContext>
myCustomListener
のインスタンスが存在する必要があります。ユーザーは org.apache.camel.component.infinispan.remote.InfinispanRemoteCustomListener
クラスを拡張し、結果となるクラスに @ClientListener
アノテーションを付けることが推奨されます。このアノテーションは org.infinispan.client.hotrod.annotation にあります。
リモートリスナーも以下のようにカスタムフィルターおよびコンバーターと関連付けられることがあります。
@ClientListener(includeCurrentState=true, filterFactoryName = "static-filter-factory", converterFactoryName = "static-converter-factory") private static class MyCustomListener extends InfinispanRemoteCustomListener { }
カスタムフィルターまたはコンバーターを使用するには、
@NamedFactory
アノテーションが付けられたクラスを実装する必要があります。必要なメソッドを実装するスケルトンは以下のとおりです。
import org.infinispan.notifications.cachelistener.filter; @NamedFactory(name = "static-converter-factory") public static class StaticConverterFactory implements CacheEventConverterFactory { @Override public CacheEventConverter<Integer, String, CustomEvent> getConverter(Object[] params) { ... } static class StaticConverter implements CacheEventConverter<Integer, String, CustomEvent>, Serializable { @Override public CustomEvent convert(Integer key, String previousValue, Metadata previousMetadata, String value, Metadata metadata, EventType eventType) { ... } } } @NamedFactory(name = "static-filter-factory") public static class StaticCacheEventFilterFactory implements CacheEventFilterFactory { @Override public CacheEventFilter<Integer, String> getFilter(final Object[] params) { ... } static class StaticCacheEventFilter implements CacheEventFilter<Integer, String>, Serializable { @Override public boolean accept(Integer key, String previousValue, Metadata previousMetadata, String value, Metadata metadata, EventType eventType) { ... } } }
カスタムフィルターおよびコンバーターはサーバーに登録する必要があります。これらのクラスの登録については、『Red Hat JBoss Data Grid Developer Guide』 の
Remote Event Listeners
の項を参照してください。
注記
リモート HotRod イベントをリッスンするには、cacheManager のタイプが
RemoteCacheManager
で、インスタンス化される必要があります。