JBoss動かしましたし、何かJBoss的なものを動かしたいなぁということで。infinispanでとりあえず Hello World 的なことをやる。
infinispanって何?
Infinispan Homepage · Infinispanによると、「すごいスケーラブルで高い可用性があるデータグリッドで100%pure javaなOSSのプロダクトです」とか書いてあります。まぁぶっちゃけJBoss民族用のmemcachedのようなキャッシュ機構と思えば、とりあえずの理解としてはOKのようです。
まず、pom.xmlに依存性を追加する。バージョンはなんも考えずに新しめのヤツを使う。
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-core</artifactId> <version>5.1.0.BETA5</version> </dependency>
↑はjbossのリポジトリを見に行くので、pom.xmlにその情報もいれてしまう。※ココなどを参照。
<profiles> <profile> <id>jboss-public-repository</id> <activation> <property> <name>jboss-public-repository</name> <value>!false</value> </property> </activation> <repositories> <repository> <id>jboss-public-repository-group</id> <name>JBoss Public Maven Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>jboss-public-repository-group</id> <name>JBoss Public Maven Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> <updatePolicy>never</updatePolicy> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles>
ちなみに、いわゆるMaven Repository: Search/Browse/ExploreのJBoss版とも言うべきサイトはSonatype Nexus Professional。jboss関連のmvnrepositoryに居ないdependencyって何処に居るんだよ……とか最初思ってたんですが、リポジトリのサイトが別なんですよ、と。
でまぁ、下記のようなコードを書いて動かすと、値が表示される。キャッシュに値が入れられますよ、と。
import org.infinispan.Cache; import org.infinispan.manager.DefaultCacheManager; public class Quickstart { public static void main(String[] args) { Cache<Object, Object> c = new DefaultCacheManager().getCache(); c.put("key", "value"); System.out.println(c.get("key")); } }
次、キャッシュサーバ&クライアントの動作を試す。
というわけでDownload · InfinispanからinfinispanをDL*1、適当なディレクトリに解凍して、binの下の↓を叩いてキャッシュサーバを起動する。
startServer.bat
と、ERROR: Please indicate protocol to run with -r parameter とエラーになる。キャッシュサーバのプロトコルは指定必須のようだ。オプションのヘルプを見ると、
-r, --protocol= Protocol to understand by the server. This is a mandatory option and you should choose one of these options
[memcached|hotrod|websocket]
とある。memcachedとwebsocketはわかるとして。hotrodって何だよって感じですが、要はバイナリ通信のことのようだ。※Infinispan Cheat Sheet from DZone Refcardz - Free, professional tutorial guides for developers のClient/server mode を参照。
というわけで、とりあえずhotrodモードで動かす。
startServer.bat -r hotrod
これでサーバは起動したので、クライアントのコードを書く。
まず、infinispanサーバにアクセスするためのライブラリが必要。なので、pom.xmlにその依存性を追加する。
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-client-hotrod</artifactId> <version>5.1.0.BETA5</version> </dependency>
クライアントとなるJavaのコード。今回はキャッシュサーバもクライアントもlocalhostで動作させてます。
import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; public class Client { public static void main(String[] args) { RemoteCacheManager cachemanager = new RemoteCacheManager("localhost"); 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")); } }
これで、false true value と表示される。
プロジェクト構成はこんな感じ。
参考情報
- Infinispan Homepage · Infinispan
- Getting Started Guide - Infinispan 6.0 - Project Documentation Editor
- 「Under development」とか書いてあり、現時点では未整備状態に近い。ただ、バージョン5.1.0.CR1が2011/12/06リリースと割と最近なので仕方ないでしょう。
- Download · Infinispan
- hello worldレベルのことだけやりたいなら、infinispanのzipをDLしたあとに出てくるページが一番親切だったりする。
- JBoss Cache改めInfinispanを使ってみる - きしだのはてな
- 複数プロセスからアクセスしたい場合はどうするの? - Taste of Tech Topics
*1:実際にはサーバ起動用のスクリプトがあればいいのだけど