CLOVER🍀

That was when it all began.

InfinispanのJavaScriptクライアント(Hot Rod)を試してみる

あけましておめでとうございます。2016年、最初のエントリになります。

今回は、InfinispanのJavaScriptクライアント、しかもHot Rod向けのものが登場していたようなので、こちらを試してみたいと思います。

参考にするドキュメントは、以下となります。

Javascript Tutorial - Infinispan

js-client/README.md at master · infinispan/js-client · GitHub

infinispan - npm

まあ、情報はこれくらいなので、あとは困ったらソースコードを読みましょう、的な。

準備

まず、必要な条件としては、Infinispan Serverがすでにあること(こちらは割愛、起動済みとします)。

クライアント側には、Node.jsをインストールしておいてください。

で、適当なディレクトリでnpm init後に、infinispan用のモジュールをインストールします。

$ npm init
$ npm install --save infinispan

これでインストールされるinfinispanモジュールは、現時点では0.0.1です。

  "dependencies": {
    "infinispan": "0.0.1"
  }

まだお試しな感じでしょうねぇ…。

使ってみる

それでは、READMEに沿ってサンプルを書いてみます。

[js-client/README.md at master · infinispan/js-client · GitHub

index.js

var infinispan = require("infinispan");

var connected = infinispan.client(11222, "localhost");

connected.then(function(client) {
    console.log("connected.");

    var putted1 = client.put("key1", "value1");
    var getted1 = putted1.then(function() {
        return client.get("key1").then(function(value) {
            console.log("key1 = " + value);
        });
    });

    var replaceAndPut = getted1.then(function() {
        return client
            .replace("key1", "value100")
            .then(function() {
                return client.put("key2", "value2");
            });
    });

    var getted2 = replaceAndPut.then(function() {
        return client
            .get("key1")
            .then(function(value) {
                console.log("key1 = " + value);
            })
            .then(function() {
                return client.get("key2").then(function(value) {
                    console.log("key2 = " + value);
                });
            })
    });

    var putAll = getted2.then(function() {
        return client.putAll([
            { key: "key3", value: "value3" },
            { key: "key4", value: "value4" },
            { key: "key5", value: "value5" }
        ])
    });

    var getAll = putAll.then(function() {
        return client
            .getAll(["key1", "key2", "key3", "key4", "key5"])
            .then(function(entries) {
                console.log("entries = " + JSON.stringify(entries));
            });
    });

    return getAll.then(function() {
        console.log("clear");
        return client.clear();
    }).finally(function() {
        return client.disconnect().then(function() {
            console.log("disonnected");
        });
    });
});

requireしてから、接続先ホスト名 or IPアドレスとポート、そしてポートを指定して接続するわけですが

var infinispan = require("infinispan");

var connected = infinispan.client(11222, "localhost");

プログラムは、基本的にPromiseを使って書くことになるので、then...みたいな感じになるようです。

初Node.jsなので、このあたりの作法はまだ慣れないですね…。

Hot Rodを使ったことがあれば基本的な操作はサンプルコードを見ればわかりそうな感じですが、ちゃんと定義を見たい場合は以下のソースを見るとよいでしょう。

https://github.com/infinispan/js-client/blob/v0.0.1/lib/infinispan.js

今回書いたサンプルを実行すると、コンソールログはこんな感じになります。

$ node index.js 
connected.
key1 = value1
key1 = value100
key2 = value2
entries = [{"key":"key2","value":"value2"},{"key":"key5","value":"value5"},{"key":"key4","value":"value4"},{"key":"key3","value":"value3"},{"key":"key1","value":"value100"}]
clear
disonnected

起動が早いなぁと…。

気になること

現在のJavaScriptクライアントでまず気になるのは、Cacheの名前が指定できそうな感じがしないことでしょうか。デフォルトのCacheを使ってそうな気がしますが…?

あと、Javaクライアントに比べると、やっぱり現時点では使える機能はだいぶ少なさそうな気がします。

終わりに

InfinispanのJavaScriptクライアントを試してみましたが、Node.jsまわりには全然慣れていないので当面慣れる感じがしないですね。

とはいえ、気になるテーマではあるので、今後もメンテナンスされるのであれば見ておこうかなぁと。
※現在メンテナンスが続けられているHot Rod Clientって…

今回作成したコードは、こちらに置いています。
https://github.com/kazuhira-r/infinispan-getting-started/tree/master/remote-js-client