[Infinispan] 推奨されるRemoteCacheManagerの使い方について


昨日、JavaでInfinispanを使う方法を紹介した。その中で、RemoteCacheManager(String)が非推奨になっていると述べた。今日は、補足として、非推奨ではない方法を紹介する。

なお、この記事の説明は、以下の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はオープンソースなので、中身が見れる。分からなければ、コードも見てみると理解できるかもしれない。

コメント