JBoss Cache改めInfinispanを使ってみる

といっても、起動してみた程度だけど。

Infinispanってなに?

Infinispanは、JBoss Cacheを前身とする、「データグリッド」プラットフォームです。と書いてあります。わかりやすい言葉でいうと、キャッシュサーバーです。
http://www.jboss.org/infinispan
今回は、Downloadからたどってinfinispan-5.0.0.BETA2-all.zipを落としました。


使いかたは、このgetting startedがわかりやすいです。
Getting Started with Infinispan

とりあえず使う

とりあえず使ってみます。zipを展開したところにあるinfinispan-core.jarとlibフォルダのすべてのjarをクラスパスに通します。

import org.infinispan.Cache;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;

public class InfinispanSample {
    public static void main(String[] args){
        EmbeddedCacheManager ecm = new DefaultCacheManager();
        Cache cache = ecm.getCache();
        cache.put("key", "hoge");
        System.out.println(cache.get("key"));
    }
}

こういうコードを実行すると次のように表示されます。

log4j:WARN No appenders could be found for logger (org.infinispan.factories.GlobalComponentRegistry).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
hoge

とりあえず設定が細かくできるMapみたいなものとして使えますね。

サーバーの起動

サーバーとして起動してみます。

> bin/startServer.sh -r hotrod

としたら起動できます。

サーバーへの接続

さっきのコードをこんな感じにしてみます。

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

public class InfinispanSample {
    public static void main(String[] args){
        RemoteCacheManager rcm = new RemoteCacheManager("localhost");
        Cache cache = rcm.getCache();
        cache.put("key", "hoge");
        System.out.println(cache.get("key"));
    }
}

コンパイルには、modules/hotrod-client/infinispan-client-hotrod.jarが必要です。実行するときには、さらにmodules/hotrod-client/lib以下のすべてのjarが必要ということになっているのですが、さすがにJettyとかは要らないだろうと思うので、試しにcommons-pool-1.5.4.jarだけ追加してみたら動きました。


そうやって実行すると、このように表示されます。

hoge

関係ないけど、Log4Jの警告も表示されなくなりました。


そしたら、オブジェクトの設定部分をコメントアウトして実行してみます。

    public static void main(String[] args){
        RemoteCacheManager rcm = new RemoteCacheManager("localhost");
        Cache cache = rcm.getCache();
        //cache.put("key", "hoge");
        System.out.println(cache.get("key"));
    }


それでもちゃんと内容が表示されました。

hoge


Infinispanが覚えていてくれたことがわかります。

まとめ

とりあえず使えました。


あとはクラスタリングでコンシステントハッシングを使った分散ができたりするみたいなんで、それを試してみたいのですけど。GUIデモがそういうことをやっているので、bin/runGuiDemo.shを2つ起動したりすると楽しいです。このデモクラスタにプログラムから接続できたら楽しそうなのだけど、ちょっとやりかたがわかりませんでした。
あと、GlassfishからJNDIで接続情報登録して使うとか、どうするんだろう。


まあ、memcached互換インタフェースもあったりRESTインタフェースもあったりして、なかなか便利そうです。