はじめに
Apache Geodeを使ったJavaのクライアントを実装例を記載します。
実行環境はJava8、Geode1.6を使用します。
簡単なサンプル
dependency
<dependency>
<groupId>org.apache.geode</groupId>
<artifactId>geode-core</artifactId>
<version>1.6.0</version>
</dependency>
Javaコード
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.client.ClientRegionShortcut;
public class GeodeTest {
public static void main(String[] args) {
ClientCache cache = null;
try {
cache = new ClientCacheFactory()
.addPoolLocator("xxx01.yahoo.co.jp", 10334)
.create();
Region<String,String> region = cache
.<String,String>createClientRegionFactory(ClientRegionShortcut.PROXY)
.create("pregion");
region.put("key1", "value1");
String value = region.get("key1");
System.out.println("value:" + value);
} finally {
if ( cache != null ) {
cache.close();
}
}
}
}
実行結果
value:value1
正直、解説の必要性がないほどシンプルな実装に思います。
locatorが複数ある場合は、addPoolLocatorは複数呼んでください。
cache = new ClientCacheFactory()
.addPoolLocator("xxx01.yahoo.co.jp", 10334)
.addPoolLocator("xxx02.yahoo.co.jp", 10334)
.create();
Region<String,String>
という記述でお気づきの方もいらっしゃるかもしれませんが、Geodeに保存できるのはStringだけではありません、例えば、MapやList、独自に作成したクラスも可能です。
Redisで複雑なデータ構造を保存しようとするとHashを利用したり、Jsonで登録したと思いますが、この点はGeodeの使いやすい点だと思います。
独自クラスを登録する
簡単なエンティティを作ってみます。
import java.io.Serializable;
public class TestEntity implements Serializable {
private String value1;
private String value2;
// setter/getter割愛
Geodeで利用する場合は、Serializableが必要なことに注意してください。
下記のように実装します。
Region<String,TestEntity> region = cache
.<String,TestEntity>createClientRegionFactory(ClientRegionShortcut.PROXY)
.create("pregion");
TestEntity putEntity = new TestEntity();
putEntity.setValue1("v1");
putEntity.setValue2("v2");
region.put("key1", putEntity);
TestEntity getEntity = region.get("key1");
System.out.println("value1:" + getEntity.getValue1());
System.out.println("value2:" + getEntity.getValue2());
実行結果
value1:v1
value2:v2
JarのDeploy
独自のクラスを登録できましたが、実は、そのままでは、この値をgfsh上で確認することができません。
先に作成したクラスを含んだJarをGeodeへデプロイすることで、値を確認する事ができます。
まずは、作成したJarをデプロイします。
gfsh>deploy --jars=/<Jarを配置したディレクトリ>/geode-sanple-1.0.jar
Deploying files: geode-sanple-1.0.jar
Total file size is: 0.01MB
Continue? (Y/n): y
Member | Deployed JAR | Deployed JAR Location
------- | -------------------- | ----------------------------------------------------
server1 | geode-sanple-1.0.jar | /xxxx/geode/server1/geode-sanple-1.0.v1.jar
server2 | geode-sanple-1.0.jar | /xxxx/geode/server2/geode-sanple-1.0.v1.jar
server3 | geode-sanple-1.0.jar | /xxxx/geode/server3/geode-sanple-1.0.v1.jar
getしてみます
gfsh>get --region=pregion --key=key1
Result : true
Key Class : java.lang.String
Key : key1
Value Class : TestEntity
value1 | value2
------ | ------
v1 | v2
内容をgfshで確認することができました。
また、PDX Serializationを使用することで、デプロイなしでも利用できるようですが、試していません。
まとめ
簡単なJavaクライアントを作成してみました。
Springを利用しているユーザには、Spring Data Geodeも提供されています。Geodeへ接続するBeanを作成して、ClientCacheをDIする位しか解説する事がないため、割愛します。
次回は、expireについて書いていきます。