7.6. カスタムマージポリシーの設定
ネットワークパーティションの処理時に EntryMergePolicy API のカスタム実装を使用するように Data Grid を設定します。
前提条件
EntryMergePolicyAPI を実装している。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ディレクトリーに追加します。
- 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());