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
実装を無視します。
手順
-
infinispan-jboss-marshalling
依存関係をクラスパスに追加します。 -
GenericJBossMarshaller
を使用するように Data Grid を設定します。 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
インターフェイスを実装する場合にのみ、オブジェクトをマーシャリングできます。
手順
-
JavaSerializationMarshaller
をマーシャラーとして使用するように Data Grid を設定します。 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 を追加します。
-
Data Grid Maven リポジトリーから
infinispan-marshaller-kryo-bundle.jar
をコピーします。 -
JAR ファイルを Data Grid サーバーのインストールディレクトリーにある
server/lib
ディレクトリーに追加します。
Data Grid ライブラリーモードの前提条件
Data Grid で Kryo マーシャリングをアプリケーションの埋め込みライブラリーとして使用するには、以下の手順を実行します。
infinispan-marshaller-kryo
依存関係をpom.xml
に追加します。<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-marshaller-kryo</artifactId> <version>${version.infinispan}</version> </dependency>
org.infinispan.marshaller.kryo.KryoMarshaller
クラスをマーシャラーとして指定します。GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new org.infinispan.marshaller.kryo.KryoMarshaller());
手順
-
SerializerRegistryService.java
インターフェイスのサービスプロバイダーを実装します。 register(Kryo)
メソッドにすべてのシリアライザー登録を配置します。シリアライザーは、Kryo API を使用して提供されたKryo
オブジェクトに登録されます。以下に例を示します。kryo.register(ExampleObject.class, new ExampleObjectSerializer())
以下の範囲内で、デプロイメント JAR ファイルにクラスを実装するためのフルパスを指定します。
META-INF/services/org/infinispan/marshaller/kryo/SerializerRegistryService
5.3.4. Protostuff Marshaller の使用
Data Grid は、Protostuff ライブラリーを使用するマーシャリング実装を提供します。
Data Grid サーバーの前提条件
Data Grid サーバーで Protostuff マーシャリングを使用するには、以下のように Protostuff マーシャリング実装のランタイムクラスファイルが含まれる JAR を追加します。
-
Data Grid Maven リポジトリーから
infinispan-marshaller-protostuff-bundle.jar
をコピーします。 -
JAR ファイルを Data Grid サーバーのインストールディレクトリーにある
server/lib
ディレクトリーに追加します。
Data Grid ライブラリーモードの前提条件
Data Grid で Protostuff マーシャリングをアプリケーションの埋め込みライブラリーとして使用するには、以下の手順を実行します。
infinispan-marshaller-protostuff
依存関係をpom.xml
に追加します。<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-marshaller-protostuff</artifactId> <version>${version.infinispan}</version> </dependency>
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
インターフェイスを提供します。
手順
-
Marshaller
インターフェイスを実装します。 - マーシャラーを使用するように Data Grid を設定します。
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
が制御するすべてのキャッシュによってデシリアライズできます。