7.6. カスタムマージポリシーの設定
ネットワークパーティションの処理時に EntryMergePolicy
API のカスタム実装を使用するように Data Grid を設定します。
前提条件
EntryMergePolicy
API を実装している。public class CustomMergePolicy implements EntryMergePolicy<String, String> { @Override public CacheEntry<String, String> merge(CacheEntry<String, String> preferredEntry, List<CacheEntry<String, String>> otherEntries) { // Decide which entry resolves the conflict return the_solved_CacheEntry; }
手順
リモートキャッシュを使用する場合は、マージポリシーの実装を Data Grid Server にデプロイします。
マージポリシーの完全修飾クラス名が含まれる
META-INF/services/org.infinispan.conflict.EntryMergePolicy
ファイルが含まれる JAR ファイルとしてクラスをパッケージ化します。# List implementations of EntryMergePolicy with the full qualified class name org.example.CustomMergePolicy
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>
JSON
{ "distributed-cache": { "partition-handling" : { "when-split": "DENY_READ_WRITES", "merge-policy": "org.example.CustomMergePolicy" } } }
YAML
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());