なお、この記事の説明は、以下のInfinispan公式User guideを参考にしている。
Infinispan User Guide "13.4.3. Java Hot Rod client"
ただ、このガイド、非常に長く、どこに何が書いてあるか読み取りづらい…。
package infinispan.training_infinispan; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; public class App { public static void main(String[] args) throws Exception { RemoteCacheManager cachemanager = new RemoteCacheManager(); RemoteCache< object object=""> cache = cachemanager.getCache(); System.out.println(cache.containsKey("key")); cache.put("key", "value"); System.out.println(cache.containsKey("key")); System.out.println(cache.get("key")); } }
これが非推奨ではない、最も簡単な書き方だ。すなわち、RemoteCacheManagerの引数に何も与えない。実はあえてサーバーの情報を何を与えないと、デフォルトで、127.0.0.1のポート番号:11222にアクセスする。
しかし、デフォルトの127.0.0.1:11222以外でInfinispanを使いたいと言う人もいると思う。そういう人は、以下のコードを使えば良いと思う。
package infinispan.training_infinispan; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; public class App { public static void main(String[] args) throws Exception { ConfigurationBuilder cb = new ConfigurationBuilder(); cb.tcpNoDelay(true).connectionPool().numTestsPerEvictionRun(3) .testOnBorrow(false).testOnReturn(false).testWhileIdle(true) .addServer().host("127.0.0.1").port(11222); RemoteCacheManager rmc = new RemoteCacheManager(cb.build()); RemoteCache< object object=""> cache = rmc.getCache(); System.out.println(cache.containsKey("key")); cache.put("key", "value"); System.out.println(cache.containsKey("key")); System.out.println(cache.get("key")); } }
利用するInfinispanサーバーのIPやその他の項目を、configurationファイルなどで指定・設定したいと言う人もいると思う。確かに、サーバーのIPが変わるたびにコードを書き換えるなんてあり得ない。
configurationファイルとして、"hotrod-client.properties"という名前のファイルを新規作成する。"hotrod-client.properties"はプロジェクト内のどこにおいてもいい。自分は、srcディレクトリ内にresourcesというディレクトリを新規作成し、その中に放り込んだ。
そして、下の設定を、"hotrod-client.properties"の中にコピーする。
infinispan.client.hotrod.transport_factory = org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory infinispan.client.hotrod.server_list = 127.0.0.1:11222 infinispan.client.hotrod.marshaller = org.infinispan.commons.marshall.jboss.GenericJBossMarshaller infinispan.client.hotrod.async_executor_factory = org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory infinispan.client.hotrod.default_executor_factory.pool_size = 1 infinispan.client.hotrod.default_executor_factory.queue_size = 10000 infinispan.client.hotrod.hash_function_impl.1 = org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashV1 infinispan.client.hotrod.tcp_no_delay = true infinispan.client.hotrod.ping_on_startup = true infinispan.client.hotrod.request_balancing_strategy = org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy infinispan.client.hotrod.key_size_estimate = 64 infinispan.client.hotrod.value_size_estimate = 512 infinispan.client.hotrod.force_return_values = false ## below is connection pooling config maxActive=-1 maxTotal = -1 maxIdle = -1 whenExhaustedAction = 1 timeBetweenEvictionRunsMillis=120000 minEvictableIdleTimeMillis=300000 testWhileIdle = true minIdle = 1
次に、pom.xmlで"hotrod-client.properties"が存在するディレクトリをresourceタグの中で明記する。下の自分のpom.xmlでいうと、15行目から21行目まで。自分の場合は、buildタグから存在していなかったので、build->resources->resourceと3階層分追加。
4.0.0 infinispan training-infinispan 0.0.1-SNAPSHOT jar training-infinispan http://maven.apache.org UTF-8 src/resources jboss.org http://repository.jboss.org/nexus/content/groups/public true true junit junit 3.8.1 test org.infinispan infinispan-client-hotrod 7.2.3.Final org.infinispan infinispan-commons 7.2.3.Final
javaのコードは、本記事の一番最初と同じ。つまり、
RemoteCacheManager cachemanager = new RemoteCacheManager();
というように、RemoteCacheManagerの引数をなしにしておくと、勝手に"hotrod-client.properties"内の設定を読み込む。
以上が、最近のバーションで推奨されているRemoteCacheManagerの使い方である。
やはり、Infinispanは情報が少ない気がする。もう少し本家のサイトのUser guideが見やすければ助かる。
ただし、Infinispanはオープンソースなので、中身が見れる。分からなければ、コードも見てみると理解できるかもしれない。
コメント
コメントを投稿