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");GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new GenericJBossMarshaller()) .whiteList() .addRegexps("org.infinispan.example.", "org.infinispan.concrete.SomeClass");Copy to Clipboard Copied! Toggle word wrap Toggle overflow 宣言的に行う:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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");GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new JavaSerializationMarshaller()) .whiteList() .addRegexps("org.infinispan.example.", "org.infinispan.concrete.SomeClass");Copy to Clipboard Copied! Toggle word wrap Toggle overflow 宣言的に行う:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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><dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-marshaller-kryo</artifactId> <version>${version.infinispan}</version> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow org.infinispan.marshaller.kryo.KryoMarshallerクラスをマーシャラーとして指定します。GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new org.infinispan.marshaller.kryo.KryoMarshaller());GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new org.infinispan.marshaller.kryo.KryoMarshaller());Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
-
SerializerRegistryService.javaインターフェイスのサービスプロバイダーを実装します。 register(Kryo)メソッドにすべてのシリアライザー登録を配置します。シリアライザーは、Kryo API を使用して提供されたKryoオブジェクトに登録されます。以下に例を示します。kryo.register(ExampleObject.class, new ExampleObjectSerializer())
kryo.register(ExampleObject.class, new ExampleObjectSerializer())Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の範囲内で、デプロイメント JAR ファイルにクラスを実装するためのフルパスを指定します。
META-INF/services/org/infinispan/marshaller/kryo/SerializerRegistryService
META-INF/services/org/infinispan/marshaller/kryo/SerializerRegistryServiceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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><dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-marshaller-protostuff</artifactId> <version>${version.infinispan}</version> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow org.infinispan.marshaller.protostuff.ProtostuffMarshallerクラスをマーシャラーとして指定します。GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new org.infinispan.marshaller.protostuff.ProtostuffMarshaller());GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new org.infinispan.marshaller.protostuff.ProtostuffMarshaller());Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
オブジェクトマーシャリングのカスタム Protostuff スキーマを登録するには、以下のいずれかを行います。
register()メソッドを呼び出します。RuntimeSchema.register(ExampleObject.class, new ExampleObjectSchema());
RuntimeSchema.register(ExampleObject.class, new ExampleObjectSchema());Copy to Clipboard Copied! Toggle word wrap Toggle overflow register()メソッドにすべてのスキーマ登録を配置するSerializerRegistryService.javaインターフェイスのサービスプロバイダーを実装します。その後、以下の範囲内で、デプロイメント JAR ファイルにクラスを実装するためのフルパスを指定します。
META-INF/services/org/infinispan/marshaller/protostuff/SchemaRegistryService
META-INF/services/org/infinispan/marshaller/protostuff/SchemaRegistryServiceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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.*");GlobalConfigurationBuilder builder = new GlobalConfigurationBuilder(); builder.serialization() .marshaller(new org.infinispan.example.marshall.CustomMarshaller()) .whiteList().addRegexp("org.infinispan.example.*");Copy to Clipboard Copied! Toggle word wrap Toggle overflow 宣言的に行う:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
カスタムマーシャラーの実装は、起動時に呼び出される 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=.*
// 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=.*
宣言的
デシリアライズホワイトリストに追加する Java クラスは、Data Grid CacheContainer に適用され、CacheContainer が制御するすべてのキャッシュによってデシリアライズできます。