第38章 データの相互運用性
38.1. プロトコルの相互運用性
38.1.1. プロトコルの相互運用性
Red Hat JBoss Data Grid のプロトコルの相互運用性により、C++ または Java などの各種プログラミング言語で書かれた REST、Memcacherd、および Hot Rod などの各種プロトコルによる、raw バイト形式のデータへの読み書きアクセスを可能にします。
デフォルトで、各プロトコルはそのプロトコルの最も効率的な形式でデータを保存し、エントリーの取得時に変換が必要とならないようにします。このデータを複数のプロトコルからアクセスする必要がある場合、互換性モードは、共有されるキャッシュで有効にされる必要があります。
互換性モードの有効化
互換性モードを有効にする手順は、Administration and Configuration Guide を参照してください。
38.1.2. ユースケースおよび要件
以下の表は、Red Hat JBoss Data Grid におけるデータ相互運用性の一般的なユースケースを示しています。
ユースケース | クライアント A (リーダーまたはライター) | クライアント B (クライアント A に対する書き込み/読み取りクライアント) |
---|---|---|
1 |
Memcached |
Hot Rod Java |
2 |
REST |
Hot Rod Java |
3 |
Memcached |
REST |
4 |
Hot Rod Java |
Hot Rod C++ |
5 |
Hot Rod Java |
Hot Rod C# |
6 |
Memcached |
Hot Rod C++ |
これらのユースケースでは、マーシャルはユーザーの判断に委ねられます。JBoss Data Grid は byte[] を格納し、ユーザーはこれを意味のあるデータにマーシャルまたはアンマーシャルします。
たとえばユースケース 1 の場合、相互運用性は Memcached クライアント (A) と Hot Rod Java クライアント (B) の間になります。クライアント A が Person
インスタンスなどのアプリケーション固有のオブジェクトをシリアライズする場合、String をキーとして使用できます。
以下の手順はすべてのユースケースに適用されます。
クライアント A 側
-
A は Protobuf や Avro などのサードパーティーマーシャラーを使用して
Person
の値を byte[] にシリアライズします。UTF-8 でエンコードされた文字列をキーとして使用する必要があります (Memcached プロトコルの要件のため)。 - A はキーバリューペアをサーバーに書き込みます (キーを UTF-8 文字列、値をバイトアレイとして)。
クライアント B 側
-
B は特定キー (String) の
Person
を読み取る必要があります。 - B は同じ UTF-8 キーを対応する byte[] にシリアライズします。
-
B は
get(byte[])
を呼び出します。 - B はシリアライズされたオブジェクトを表す byte[] を取得します。
-
B は A と同じマーシャラーを使用して byte[] を対応する
Person
オブジェクトにアンマーシャルします。
- ユースケース 4 では、Hot Rod Java クライアントに含まれる Protostream Marshaller の使用が推奨されます。Hot Rod C++ クライアントでは、Google の Protobuf Marshaller (https://developers.google.com/protocol-buffers/docs/overview) が推奨されます。
- ユースケース 5 では、デフォルトの Hot Rod マーシャラーを使用できます。
38.1.3. REST 上のプロトコル相互運用性
REST インターフェース経由でデータが格納されると、値は Hot Rod または Memcached クライアントによってバイトのシーケンスとして解釈されます。「Content-Type」HTTP ヘッダーによって指定された MIME タイプを使用して、このバイトシーケンスに意味が与えられますが、コンテントタイプの情報は REST クライアントのみが利用できます。これには、特定の相互運用性の設定は必要ありません。
REST よりデータを取得するとき、格納されたプリミティブ型はそのプリミティブ形式で読み取りされます。Hot Rod または Memcached によって UTF-8 String が格納された場合、REST から String として読み出しされます。カスタムオブジェクトが埋め込みまたはリモートキャッシュ経由でシリアライズおよび格納された場合、application/x-java-serialized-object
、application/xml
、または application/json
として読み出すことができます。その他のバイトアレイはすべて application/octet-stream
として処理されます。