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;
       }

手順

  1. リモートキャッシュを使用する場合は、マージポリシーの実装を Data Grid Server にデプロイします。

    1. マージポリシーの完全修飾クラス名が含まれる META-INF/services/org.infinispan.conflict.EntryMergePolicy ファイルが含まれる JAR ファイルとしてクラスをパッケージ化します。

      # List implementations of EntryMergePolicy with the full qualified class name
      org.example.CustomMergePolicy
    2. JAR ファイルを server/lib ディレクトリーに追加します。

      ヒント

      install コマンドを Data Grid コマンドラインインターフェイス (CLI) で使用して、JAR を server/lib ディレクトリーにダウンロードします。

  2. Data Grid 設定を開いて編集します。
  3. 必要に応じて encoding 要素または encoding() メソッドを使用して、適宜キャッシュエンコーディングを設定します。

    リモートキャッシュでは、エントリーのマージ時に比較にオブジェクトメタデータのみを使用する場合は、メディアタイプとして application/x-protostream を使用できます。この場合、Data Grid はエントリーを EntryMergePolicybyte[] として返します。

    競合のマージ時にオブジェクト自体が必要な場合、キャッシュを application/x-java-object メディアタイプで設定する必要があります。この場合、関連する ProtoStream マーシャラーを Data Grid Server にデプロイし、クライアントが Protobuf エンコーディングを使用する場合に、オブジェクト変換に byte[] を実行できるようにする必要があります。

  4. パーティション処理設定の一部として merge-policy 属性または mergePolicy() メソッドを使用して、カスタムのマージポリシーを指定します。
  5. 変更を保存します。

カスタムマージポリシーの設定

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());

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.