第5章 アプリケーションの Data Grid 8 への移行


5.1. Data Grid 8 でのマーシャリング

マーシャリング機能は、Data Grid 8 で大幅にリファクタリングされ、内部オブジェクトとユーザーオブジェクトを分離します。

Data Grid が内部クラスのマーシャリングを処理するようになったため、埋め込みキャッシュまたはリモートキャッシュを使用してマーシャラーを設定するときに、これらの内部クラスを処理する必要がなくなりました。

5.1.1. ProtoStream マーシャリング

デフォルトでは、Data Grid 8 は ProtoStream API を使用して、言語に依存しない下位互換性のある形式である Protocol Buffers としてデータをマーシャリングします。

Protobuf エンコーディングはスキーマ定義のフォーマットであり、現在多くのアプリケーションのデフォルト標準であり、Data Grid 7 のデフォルトであった JBoss Marshalling と比較してデータをトランスコードする際の柔軟性が高くなっています。

ProtoStream マーシャラーは Protobuf 形式に基づいているため、DataGrid は最初に Java オブジェクトに変換せずに他のエンコーディングに変換できます。JBoss Marshalling を使用する場合、他の形式に変換する前に、キーと値を Java オブジェクトに変換する必要があります。

Data Grid 8 への移行の一環として、Java クラスに ProtoStream マーシャリングの使用を開始する必要があります。

高レベルから、ProtoStream マーシャラーを使用するには、ProtoStream プロセッサーを使用して SerializationContextInitializer 実装を生成します。まず、@Proto アノテーションを Java クラスに追加してから、Data Grid が提供する ProtoStream プロセッサーを使用して、以下を含むシリアル化コンテキストを生成します。

  • Java オブジェクトの構造化表現を Protobuf メッセージタイプとして提供する .proto スキーマ。
  • Java オブジェクトを Protobuf 形式にエンコードするための Marshaller の実装。

埋め込みキャッシュとリモートキャッシュのどちらを使用するかに応じて、Data Grid は SerializationContextInitializer 実装を自動的に登録できます。

ネストされた ProtoStream アノテーション

Data Grid 8.2 は ProtoStream 4.4.0.Final にアップグレードします。これには、場合によっては移行が必要です。

以前のバージョンでは、ProtoStream API は、メッセージが最上位としてのみ生成されたメッセージタイプを正しくネストしませんでした。

永続キャッシュストアに Protobuf でエンコードされたエントリーがある場合は、ProtoStream アノテーションがトップレベルになるように Java クラスを変更する必要があります。これにより、永続化されたメッセージのネストが Java クラスのネストと一致することが保証されます。一致しない場合、データの非互換性の問題が発生する可能性があります。

たとえば、次のようなネストされた Java クラスがある場合:

class OuterClass {
   class InnerClass {
       @ProtoField(1)
       int someMethod() {
       }
   }
}

InnerClassOuterClass の子ではなくなるように、クラスを調整する必要があります。

class InnerClass {
    @ProtoField(1)
    int someMethod() {
    }
}
Data Grid サーバーとのマーシャリング

リモートキャッシュには Protobuf エンコーディングのみを使用し、カスタムタイプには ProtoStream マーシャラーを組み合わせて使用する必要があります。

JBoss マーシャリングなどの他のマーシャラー実装では、Data Grid CLI、Data Grid Console、または Ickle クエリーと互換性のない異なるキャッシュエンコーディングを使用する必要があります。

キャッシュストアと ProtoStream

Data Grid 7.x では、キャッシュストアに永続化するデータは、Data Grid 8 の ProtoStream マーシャラーと互換性がありません。データを DataGrid7.x キャッシュストアから Data Grid 8 キャッシュストアに移行するには、StoreMigrator ユーティリティーを使用する必要があります。

5.1.2. 代替マーシャラーの実装

Data Grid は、ProtoStream の代替マーシャラー実装を提供し、古いバージョンからの移行を容易にします。これらの代替マーシャラーは、ProtoStream マーシャリングに移行する際の暫定的な解決策としてのみ使用する必要があります。

注記

新しいプロジェクトの場合、将来のアップグレードや移行に関する問題を回避するために、ProtoStream マーシャリングのみを使用することを強く推奨します。

デシリアライズ許可リスト

Red Hat では、多様性を受け入れる用語の使用への取り組みに努めており、Java クラスのシリアル化を設定する際に使用するホワイトリストという用語を許可リストに変更しています。

Data Grid 8.1

<cache-container>
   <serialization>
      <white-list>
         <class>org.infinispan.test.data.Person</class>
         <regex>org.infinispan.test.data.*</regex>
       </white-list>
   </serialization>
</cache-container>

Data Grid 8.2

<cache-container>
   <serialization>
      <allow-list>
         <class>org.infinispan.test.data.Person</class>
         <regex>org.infinispan.test.data.*</regex>
       </allow-list>
   </serialization>
</cache-container>

JBoss marshalling

Data Grid 7 では、JBoss Marshalling がデフォルトのマーシャラーです。Data Grid 8 では、Proto Stream マーシャリングがデフォルトです。

注記

Java シリアル化を使用するクライアント要件がある場合は、JBoss Marshalling の代わりに JavaSerializationMarshaller を使用する必要があります。

Data Grid 8 への移行中に一時的な解決策として JBoss Marshalling を使用する必要がある場合は、以下を実行します。

埋め込みキャッシュ

  1. infinispan-jboss-marshalling 依存関係をクラスパスに追加します。
  2. 次に、JBossUserMarshaller を使用するようにデータグリッドを設定します。

    <serialization marshaller="org.infinispan.jboss.marshalling.core.JBossUserMarshaller"/>
  3. Data Grid が逆シリアル化を許可するクラスのリストにクラスを追加します。

リモートキャッシュ

Data GridServer は JBossMarshalling をサポートしておらず、infinispan-jboss-marshalling モジュールがクラスパス上にある場合、GenericJBossMarshaller は自動的に設定されなくなりました。

次のように、JBoss Marshalling を使用するように Hot Rod Java クライアントを設定する必要があります。

  • RemoteCacheManager

    .marshaller("org.infinispan.jboss.marshalling.commons.GenericJBossMarshaller");
  • hotrod-client.properties

    infinispan.client.hotrod.marshaller = GenericJBossMarshaller
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.