5.2. ProtoStream を使用したユーザータイプのマーシャリング
ユーザータイプは、Data Grid がそのままではサポートしない Java オブジェクトです。ユーザータイプをマーシャリングするには、SerializationContextInitializer インターフェイスを実装して Java オブジェクトを記述し、ProtoStream ライブラリーが Protobuf 形式にエンコードし、Data Grid がそれらを送信および保存できるようにします。
5.2.1. シリアル化コンテキストイニシャライザーの生成 リンクのコピーリンクがクリップボードにコピーされました!
ProtoStream SerializationContext には、Protobuf スキーマからロードされたカスタム Java オブジェクトの Protobuf タイプ定義と、それらのオブジェクトに付随するマーシャラーが含まれています。
Data Grid は、コンパイル時にクラスの Java アノテーションを処理する protostream-processor アーティファクトを提供します。プロセッサーは、Protobuf スキーマ、マーシャラー、および ProtoStream SerializationContext の初期化に使用できる SerializationContextInitializer インターフェイスの具体的な実装を生成します。
デフォルトでは、実装名は Impl 接尾辞が付いたアノテーション付きクラス名です。
手順
protostream-processor依存関係をpom.xmlに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マーシャリングする Java オブジェクトに
@ProtoFieldと@ProtoFactoryアノテーションを付けます。Author.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Book.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SerializationContextInitializerを拡張し、@AutoProtoSchemaBuilderアノテーションが付けられたインターフェイスを定義します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
SerializationContextInitializer 実装を Data Grid 設定に追加して登録します。
シリアル化コンテキストイニシャライザーの登録 を参照してください。
5.2.2. シリアライゼーションコンテキストイニシャライザーの手動実装 リンクのコピーリンクがクリップボードにコピーされました!
場合によっては、Protobuf スキーマを手動で定義し、ProtoStream マーシャラーを実装する必要があります。たとえば、Java オブジェクトクラスを変更してアノテーションを追加できない場合などです。
手順
マーシャリングする Java オブジェクトの構造化表現を提供する Protobuf スキーマの
.protoファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前述の
.library.protoファイルは、book_sample パッケージに含まれる Book という名前のエンティティー (Protobuf メッセージタイプ) を定義します。Book は、プリミティブ型のいくつかのフィールドと、Author メッセージタイプである authors という名前のアレイ (Protobuf 反復可能フィールド) を宣言します。- メッセージをネストできますが、結果的に構造は厳密にツリーであり、グラフではありません。
- 型の継承はできません。
- コレクションはサポート対象外ですが、フィールドを繰り返してアレイをエミュレートできます。
org.infinispan.protostream.MessageMarshallerインターフェイスを使用して、クラスのマーシャラーを実装します。注記MessageMarshallerインターフェイスが非推奨になりました。次のバージョンの Data Grid は、外部のサードパーティー Java オブジェクトクラスに
@ProtoAdaptorアノテーションを使用するアダプタークラスを作成できる代替実装を提供します。BookMarshaller.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AuthorMarshaller.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow .protoスキーマと ProtoStream マーシャラー実装をSerializationContextに登録するSerializationContextInitializer実装を作成します。ManualSerializationContextInitializer.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
SerializationContextInitializer 実装を Data Grid 設定に追加して登録します。
シリアル化コンテキストイニシャライザーの登録 を参照してください。
5.2.3. シリアル化コンテキストイニシャライザーの登録 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid 設定で SerializationContextInitializer 実装を宣言して登録します。
手順
-
以下の例のように、プログラムまたは宣言的に
SerializationContextInitializer実装を手動で登録します。
プログラムによる設定
GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
builder.serialization()
.addContextInitializers(new LibraryInitializerImpl(), new SCIImpl());
GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
builder.serialization()
.addContextInitializers(new LibraryInitializerImpl(), new SCIImpl());
宣言型設定
<serialization>
<context-initializer class="org.infinispan.example.LibraryInitializerImpl"/>
<context-initializer class="org.infinispan.example.another.SCIImpl"/>
</serialization>
<serialization>
<context-initializer class="org.infinispan.example.LibraryInitializerImpl"/>
<context-initializer class="org.infinispan.example.another.SCIImpl"/>
</serialization>