1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Apache GeodeのJavaクライアント

Posted at

はじめに

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について書いていきます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?