JavaでInfinispanを使う方法




前回の記事の最後で、次回はJBossについて語る、と書いたが、(例のごとく)公約を破る。公約は破るためにある。

今回は、JavaでInfinispan 7.2.3(2015/6/25現在最新リリースバージョン)を使うデモをしてみる。InfinispanはClient-Serverモードで使うことにする。なお、ここでは、Mavenを利用する。使用したOSはwindows 8.1、Javaのバージョンは1.8だ。ただ、そこら辺はほとんど気にしなくていい。重要なのは、Infinispanのバージョンが5.3以上、という点だ。5.2以前と5.3以降では、Infinispanのフォルダー内の構造から、configurationファイルの中身に至るまで、大きく異なっている。
(参考:CLOVER Infinispan Server 5.3を使ってみる

デモのシナリオは次の通り。
  1. Infinispanをダウンロードし、起動
  2. Mavenプロジェクトを作成し、pom.xmlを少し修正
  3. ソースコードを少しいじる
これだけだ。

Infinispanのダウンロード・起動


↓から、7.2.3.FinalのServerをダウンロードする。
http://infinispan.org/download/

そして、zipを解凍する。

Infinispanの起動は、infinispan-server-7.2.3.Final\bin内のstandalone.batをダブルクリックするだけだ。当然、コマンドプロンプトから実行しても良い。

実行すると、コンソール上に、数十行くらい、メッセージが流れ、数秒後に止まる。これで、Infinispanは起動中になる。コンソールはこのまま放置しておく。停止させたい場合は、Ctrl+Cを入力すれば良い。

起動時に流れたメッセージの中で、記憶にとどめておいて欲しい文字列がある。
HotRodServer listening on 127.0.0.1:11222
上のような文字列が、中盤から後半あたりあるはずだ。このIPアドレスとポート番号は、Javaでコードを書くときに利用するため、覚えておく。

Mavenプロジェクトの作成・pom.xmlの修正

Mavenプロジェクトを新規作成する。ひな形として利用するアーキタイプは何でもいい。中身がすっからかんの
  • グループID
    • org.apache.maven.archetypes
  • アーティファクトID
    • maven-archetype-quickstart
あたりでいい。Eclipseならデフォルトでこのアーキタイプを選択することが出来るはずだ。

次に、pom.xmlの修正をする。以下に、pom.xmlの全文を晒す。


 4.0.0

 infinispan
 training-infinispan
 0.0.1-SNAPSHOT
 jar

 training-infinispan
 http://maven.apache.org

 
  UTF-8
 

 
  
   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
  
 


ソースコードの編集


以下のように書けばよい。
(次のサイトのコードを参考にさせていただきました。kagamihogeの日記 infinispanを動かした

package infinispan.training_infinispan;

import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;

/**
 * Hello world!
 *
 */
public class App {
 public static void main(String[] args) throws Exception {
  RemoteCacheManager cachemanager = new RemoteCacheManager("127.0.0.1:11222");
  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の引数に入れた文字列は、Infinispan起動時のメッセージに出てきたIPアドレスとポート番号だ。

あとは、実行をすれば、以下の出力が得られ、Infinispanを利用できたことが分かる。

INFO: ISPN004021: Infinispan version: 7.2.3.Final [木 6 25 19:50:16 JST 2015]
false
true
value
ただし、Eclipseで上のコードを見ると、RemoteCacheManagerに訂正線が引かれ、『コンストラクター RemoteCacheManager(String) は使用すべきではありません』と諫められる。RemoteCacheManager(String)の実装部(RemoteCacheManager.class)を見てみると、@Deprecatedアノテーションが付いており、非推奨であることが明示されている。 RemoteCacheManager.classの中で@Deprecatedアノテーションが付いていないコンストラクターは、下の4つだけだ。
RemoteCacheManager(Configuration configuration)
RemoteCacheManager(Configuration configuration, boolean start)
RemoteCacheManager(boolean start)
RemoteCacheManager()

この中で、下の2つは、hotrod-client.propertiesを読み込んでいる。すなわち、「Configurationクラスを使え」、「サーバーのアドレスをソースコードを引数に直打ちするな」と言うことだ。

(RemoteCacheManagerについての補足)

おわりに


今回は、JavaでInfinispanを使う方法を、簡単に紹介してみた。Infinispanについて書いてみようと思ったのは、自分がInfinispanを触っていて、意外にも最近の情報が見つからなかったためだ。は2011年頃の情報は多く見つかるが、特にバージョン5.3以降のInfinispan大改変後の情報が見つからない。Infinispanは簡単に使えるインメモリKVSなので、もう少し普及して、情報が増えてくれたらうれしい限りだ。


今回作成したmavenプロジェクトは、Githubに公開している。
https://github.com/nktener0902/infinispanDemo
ダウンロードして、Mavenプロジェクトとしてインポートすれば使えるはずだ。

コメント