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");
    • 宣言的に行う:

      <serialization marshaller="org.infinispan.jboss.marshalling.commons.GenericJBossMarshaller">
        <white-list>
            <class>org.infinispan.concrete.SomeClass</class>
            <regex>org.infinispan.example.*</regex>
        <white-list>
      </serialization>

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");
    • 宣言的に行う:

      <serialization marshaller="org.infinispan.commons.marshall.JavaSerializationMarshaller">
          <white-list>
              <class>org.infinispan.concrete.SomeClass</class>
              <regex>org.infinispan.example.*</regex>
          </white-list>
      </serialization>

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>
  2. org.infinispan.marshaller.kryo.KryoMarshaller クラスをマーシャラーとして指定します。

    GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
    builder.serialization()
           .marshaller(new org.infinispan.marshaller.kryo.KryoMarshaller());

手順

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

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

    META-INF/services/org/infinispan/marshaller/kryo/SerializerRegistryService

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>
  2. org.infinispan.marshaller.protostuff.ProtostuffMarshaller クラスをマーシャラーとして指定します。

    GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder();
    builder.serialization()
           .marshaller(new org.infinispan.marshaller.protostuff.ProtostuffMarshaller());

手順

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

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

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

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

    META-INF/services/org/infinispan/marshaller/protostuff/SchemaRegistryService

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.*");
    • 宣言的に行う:

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

カスタムマーシャラーの実装は、起動時に呼び出される 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=.*

宣言的

<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>

注記

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.