5.3. 代替マーシャラー実装の設定


Data Grid は、ProtoStream の代わりに使用できる Marshaller 実装を提供します。また、カスタムマーシャラー実装を使用するように Data Grid を設定することもできます。

5.3.1. JBoss Marshalling の使用

JBoss Marshalling はシリアル化ベースのマーシャリングライブラリーであり、以前の Data Grid バージョンではデフォルトのマーシャラーでした。

注記
  • Data Grid では、シリアル化ベースのマーシャリングを使用しないでください。代わりに、後方互換性を保証する高性能のバイナリーワイヤー形式である Protostream を使用する必要があります。
  • JBoss Marshalling および AdvancedExternalizer インターフェイスは非推奨となり、今後のリリースで削除される予定です。しかし、Data Grid は、JBoss Marshalling を使用せずにデータを永続化したときに AdvancedExternalizer 実装を無視します。

手順

  1. infinispan-jboss-marshalling 依存関係をクラスパスに追加します。
  2. GenericJBossMarshaller を使用するように Data Grid を設定します。
  3. Java クラスをデシリアライズ許可リストに追加します。

    • プログラムで行う:

      GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
      builder.serialization()
             .marshaller(new GenericJBossMarshaller())
             .whiteList()
             .addRegexps("org.infinispan.example.", "org.infinispan.concrete.SomeClass");
      Copy to Clipboard Toggle word wrap
    • 宣言的に行う:

      <serialization marshaller="org.infinispan.jboss.marshalling.commons.GenericJBossMarshaller">
        <white-list>
            <class>org.infinispan.concrete.SomeClass</class>
            <regex>org.infinispan.example.*</regex>
        <white-list>
      </serialization>
      Copy to Clipboard Toggle word wrap

5.3.2. Java シリアライゼーションの使用

Data Grid で Java シリアライゼーションを使用すると、Java オブジェクトが Java Serializable インターフェイスを実装する場合にのみ、オブジェクトをマーシャリングできます。

手順

  1. JavaSerializationMarshaller をマーシャラーとして使用するように Data Grid を設定します。
  2. Java クラスをデシリアライズ許可リストに追加します。

    • プログラムで行う:

      GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
      builder.serialization()
             .marshaller(new JavaSerializationMarshaller())
             .whiteList()
             .addRegexps("org.infinispan.example.", "org.infinispan.concrete.SomeClass");
      Copy to Clipboard Toggle word wrap
    • 宣言的に行う:

      <serialization marshaller="org.infinispan.commons.marshall.JavaSerializationMarshaller">
          <white-list>
              <class>org.infinispan.concrete.SomeClass</class>
              <regex>org.infinispan.example.*</regex>
          </white-list>
      </serialization>
      Copy to Clipboard Toggle word wrap

5.3.3. Kryo Marshaller の使用

Data Grid は、Kryo ライブラリーを使用するマーシャリング実装を提供します。

Data Grid サーバーの前提条件

Data Grid サーバーで Kryo マーシャリングを使用するには、以下のように Kryo マーシャリング実装のランタイムクラスファイルが含まれる JAR を追加します。

  1. Data Grid Maven リポジトリーから infinispan-marshaller-kryo-bundle.jar をコピーします。
  2. JAR ファイルを Data Grid サーバーのインストールディレクトリーにある server/lib ディレクトリーに追加します。

Data Grid ライブラリーモードの前提条件

Data Grid で Kryo マーシャリングをアプリケーションの埋め込みライブラリーとして使用するには、以下の手順を実行します。

  1. infinispan-marshaller-kryo 依存関係を pom.xml に追加します。

    <dependency>
      <groupId>org.infinispan</groupId>
      <artifactId>infinispan-marshaller-kryo</artifactId>
      <version>${version.infinispan}</version>
    </dependency>
    Copy to Clipboard Toggle word wrap
  2. org.infinispan.marshaller.kryo.KryoMarshaller クラスをマーシャラーとして指定します。

    GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
    builder.serialization()
           .marshaller(new org.infinispan.marshaller.kryo.KryoMarshaller());
    Copy to Clipboard Toggle word wrap

手順

  1. SerializerRegistryService.java インターフェイスのサービスプロバイダーを実装します。
  2. register(Kryo) メソッドにすべてのシリアライザー登録を配置します。シリアライザーは、Kryo API を使用して提供された Kryo オブジェクトに登録されます。以下に例を示します。

    kryo.register(ExampleObject.class, new ExampleObjectSerializer())
    Copy to Clipboard Toggle word wrap
  3. 以下の範囲内で、デプロイメント JAR ファイルにクラスを実装するためのフルパスを指定します。

    META-INF/services/org/infinispan/marshaller/kryo/SerializerRegistryService
    Copy to Clipboard Toggle word wrap

5.3.4. Protostuff Marshaller の使用

Data Grid は、Protostuff ライブラリーを使用するマーシャリング実装を提供します。

Data Grid サーバーの前提条件

Data Grid サーバーで Protostuff マーシャリングを使用するには、以下のように Protostuff マーシャリング実装のランタイムクラスファイルが含まれる JAR を追加します。

  1. Data Grid Maven リポジトリーから infinispan-marshaller-protostuff-bundle.jar をコピーします。
  2. JAR ファイルを Data Grid サーバーのインストールディレクトリーにある server/lib ディレクトリーに追加します。

Data Grid ライブラリーモードの前提条件

Data Grid で Protostuff マーシャリングをアプリケーションの埋め込みライブラリーとして使用するには、以下の手順を実行します。

  1. infinispan-marshaller-protostuff 依存関係を pom.xml に追加します。

    <dependency>
      <groupId>org.infinispan</groupId>
      <artifactId>infinispan-marshaller-protostuff</artifactId>
      <version>${version.infinispan}</version>
    </dependency>
    Copy to Clipboard Toggle word wrap
  2. org.infinispan.marshaller.protostuff.ProtostuffMarshaller クラスをマーシャラーとして指定します。

    GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
    builder.serialization()
           .marshaller(new org.infinispan.marshaller.protostuff.ProtostuffMarshaller());
    Copy to Clipboard Toggle word wrap

手順

オブジェクトマーシャリングのカスタム Protostuff スキーマを登録するには、以下のいずれかを行います。

  • register() メソッドを呼び出します。

    RuntimeSchema.register(ExampleObject.class, new ExampleObjectSchema());
    Copy to Clipboard Toggle word wrap
  • register() メソッドにすべてのスキーマ登録を配置する SerializerRegistryService.java インターフェイスのサービスプロバイダーを実装します。

    その後、以下の範囲内で、デプロイメント JAR ファイルにクラスを実装するためのフルパスを指定します。

    META-INF/services/org/infinispan/marshaller/protostuff/SchemaRegistryService
    Copy to Clipboard Toggle word wrap

5.3.5. カスタムマーシャラーの使用

Data Grid は、カスタムマーシャラー用に実装できる Marshaller インターフェイスを提供します。

手順

  1. Marshaller インターフェイスを実装します。
  2. マーシャラーを使用するように Data Grid を設定します。
  3. Java クラスをデシリアライズ許可リストに追加します。

    • プログラムで行う:

      GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
      builder.serialization()
            .marshaller(new org.infinispan.example.marshall.CustomMarshaller())
            .whiteList().addRegexp("org.infinispan.example.*");
      Copy to Clipboard Toggle word wrap
    • 宣言的に行う:

      <serialization marshaller="org.infinispan.example.marshall.CustomMarshaller">
          <white-list>
              <class>org.infinispan.concrete.SomeClass</class>
              <regex>org.infinispan.example.*</regex>
          </white-list>
      </serialization>
      Copy to Clipboard Toggle word wrap
ヒント

カスタムマーシャラーの実装は、起動時に呼び出される initialize() メソッドを使用して設定済みの許可リストにアクセスできます。

5.3.6. Adding Java Classes to Deserialization White Lists

Data Grid では、セキュリティー上の理由から、任意の Java クラスのデシリアルは許可されません。これは、JSON、XML、およびマーシャリングされた byte[] コンテンツが該当します。

システムプロパティーを使用するか、Data Grid 設定で Java クラスを指定して、デシリアライズホワイトリストに Java クラスを追加する必要があります。

システムプロパティー

// Specify a comma-separated list of fully qualified class names
-Dinfinispan.deserialization.whitelist.classes=java.time.Instant,com.myclass.Entity

// Specify a regular expression to match classes
-Dinfinispan.deserialization.whitelist.regexps=.*
Copy to Clipboard Toggle word wrap

宣言的

<cache-container>
   <serialization version="1.0" marshaller="org.infinispan.marshall.TestObjectStreamMarshaller">
      <white-list>
         <class>org.infinispan.test.data.Person</class>
         <regex>org.infinispan.test.data.*</regex>
       </white-list>
   </serialization>
</cache-container>
Copy to Clipboard Toggle word wrap

注記

デシリアライズホワイトリストに追加する Java クラスは、Data Grid CacheContainer に適用され、CacheContainer が制御するすべてのキャッシュによってデシリアライズできます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat