7.6. カスタムマージポリシーの設定
ネットワークパーティションの処理時に EntryMergePolicy
API のカスタム実装を使用するように Data Grid を設定します。
前提条件
EntryMergePolicy
API を実装している。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
リモートキャッシュを使用する場合は、マージポリシーの実装を Data Grid Server にデプロイします。
マージポリシーの完全修飾クラス名が含まれる
META-INF/services/org.infinispan.conflict.EntryMergePolicy
ファイルが含まれる JAR ファイルとしてクラスをパッケージ化します。List implementations of EntryMergePolicy with the full qualified class name
# List implementations of EntryMergePolicy with the full qualified class name org.example.CustomMergePolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JAR ファイルを
server/lib
ディレクトリーに追加します。ヒントinstall
コマンドを Data Grid コマンドラインインターフェイス (CLI) で使用して、JAR をserver/lib
ディレクトリーにダウンロードします。
- Data Grid 設定を開いて編集します。
必要に応じて
encoding
要素またはencoding()
メソッドを使用して、適宜キャッシュエンコーディングを設定します。リモートキャッシュでは、エントリーのマージ時に比較にオブジェクトメタデータのみを使用する場合は、メディアタイプとして
application/x-protostream
を使用できます。この場合、Data Grid はエントリーをEntryMergePolicy
にbyte[]
として返します。競合のマージ時にオブジェクト自体が必要な場合、キャッシュを
application/x-java-object
メディアタイプで設定する必要があります。この場合、関連する ProtoStream マーシャラーを Data Grid Server にデプロイし、クライアントが Protobuf エンコーディングを使用する場合に、オブジェクト変換にbyte[]
を実行できるようにする必要があります。-
パーティション処理設定の一部として
merge-policy
属性またはmergePolicy()
メソッドを使用して、カスタムのマージポリシーを指定します。 - 変更を保存します。
カスタムマージポリシーの設定
XML
<distributed-cache name="mycache"> <partition-handling when-split="DENY_READ_WRITES" merge-policy="org.example.CustomMergePolicy"/> </distributed-cache>
<distributed-cache name="mycache">
<partition-handling when-split="DENY_READ_WRITES"
merge-policy="org.example.CustomMergePolicy"/>
</distributed-cache>
JSON
YAML
distributedCache: partitionHandling: whenSplit: DENY_READ_WRITES mergePolicy: org.example.CustomMergePolicy
distributedCache:
partitionHandling:
whenSplit: DENY_READ_WRITES
mergePolicy: org.example.CustomMergePolicy
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.clustering().cacheMode(CacheMode.DIST_SYNC) .partitionHandling() .whenSplit(PartitionHandling.DENY_READ_WRITES) .mergePolicy(new CustomMergePolicy());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC)
.partitionHandling()
.whenSplit(PartitionHandling.DENY_READ_WRITES)
.mergePolicy(new CustomMergePolicy());