8 Coherence MicroProfile構成の使用

Coherence MicroProfile (MP)構成では、Coherenceクラスタ・メンバー内のEclipse MicroProfile構成がサポートされます。『Eclipse MicroProfile Configuration』を参照してください。Coherence MP構成を使用すると、サポートされている構成ソースに指定された値から様々なCoherenceパラメータを構成し、Coherenceキャッシュを別の変更可能な構成ソースとして使用できます。

この章の内容は次のとおりです。

Coherence MicroProfile構成の使用の有効化

Coherence MP構成を使用するには、まずpom.xmlファイルで依存関係として宣言する必要があります。

Coherence MP構成は次のように宣言できます:
<dependency>
    <groupId>${coherence.groupId}</groupId>
    <artifactId>coherence-mp-config</artifactId>
    <version>${coherence.version}</version>
</dependency>
Eclipse MP構成の実装を依存関係として指定する必要もあります。たとえば、Helidonを使用している場合は、pom.xmlファイルに次を追加します:
<dependency>
    <groupId>io.helidon.microprofile.config</groupId>
    <artifactId>helidon-microprofile-config</artifactId>
    <version>2.5.0</version>
</dependency>

<!-- optional: add it if you want YAML config file support -->
<dependency>
    <groupId>io.helidon.config</groupId>
    <artifactId>helidon-config-yaml</artifactId>
    <version>2.5.0</version>
</dependency>

MP構成を使用したCoherenceの構成

Coherenceには、特定の属性を定義したり、実行時のクラスタ・メンバーの動作をカスタマイズするために使用できる多数の構成プロパティが用意されています。
たとえば、システム・プロパティを使用して、クラスタ名やロール名などの属性を定義したり、クラスタ・メンバーがデータを格納するかどうかを定義できます:
-Dcoherence.cluster=MyCluster -Dcoherence.role=Proxy -Dcoherence.distributed.localstorage=false
これらの属性のほとんどは、操作構成ファイルまたはキャッシュ構成ファイル内で定義することもできます。たとえば、クラスタ名とロールという最初の2つの属性は、操作構成オーバーライド・ファイル内で定義できます:
  <cluster-config>
    <member-identity>
      <cluster-name>MyCluster</cluster-name>
      <role-name>Proxy</role-name>
    </member-identity>
  </cluster-config>
ほとんどの場合、これらの2つのオプションで十分ですが、これらがCoherenceを構成する唯一の方法であることにはいくつかの問題があります:
  • アプリケーションの基礎としてHelidon(『Helidon』を参照)などのEclipse MicroProfile実装のいずれかを使用している場合、別のファイルまたはシステム・プロパティではなく、他の構成パラメータとともにCoherence構成パラメータの一部を定義することをお薦めします。
  • Kubernetesなどの一部の環境では、Javaシステム・プロパティは使用しにくく、構成プロパティをコンテナに渡す方法としては環境変数が望ましいです。

残念ながら、前述の2つの使用法はいずれもそのままではサポートされていません。Coherence MP構成は、このギャップを埋めるように設計されています。

クラス・パスにcoherence-mp-configおよびEclipse MP構成の実装の指定があるかぎり、Coherenceは標準またはカスタム構成ソースのいずれかを使用して、理解できる様々な構成オプションを解決します。

MP構成の標準構成ソースには、META-INF/microprofile-config.propertiesファイル(クラス・パスに存在する場合)、環境変数およびシステム・プロパティ(この順序で、後者のプロパティが前者のプロパティをオーバーライドします)があります。これらの構成ソースは、前述の2番目の使用法に直接対応し、Kubernetes YAMLファイル内の環境変数を介してCoherence構成オプションを指定できます。たとえば:
containers:
    - name: my-app
      image: my-company/my-app:1.0.0
       env:
        - name: COHERENCE_CLUSTER
          value: "MyCluster"
        - name: COHERENCE_ROLE
          value: "Proxy"
        - name: COHERENCE_DISTRIBUTED_LOCALSTORAGE
          value: "false"

上記は単なる例です。KubernetesでCoherenceクラスタを実行している場合は、Coherenceクラスタの構成と操作の両方が非常に簡単になるため、かわりにCoherenceオペレータを使用します。

Coherence構成プロパティは、アプリケーションの他の構成プロパティとともに指定することもできます。これにより、すべてを1箇所に保持でき、多くのファイルに分散されることはありません。たとえば、Helidonアプリケーションを記述する場合は、coherenceセクションをapplication.yamlファイルに追加するだけです:
coherence:
  cluster: MyCluster
  role: Proxy
  distributed:
    localstorage: false

構成ソースとしてのCoherenceキャッシュの使用

Coherence MP構成は、Eclipse MP構成のConfigSourceインタフェースの実装も提供し、これによって構成パラメータをCoherenceキャッシュに格納できます。

この機能にはいくつかの利点があります:
  • ほとんどすべてのデフォルト構成ソースは静的ですが、それらとは異なり、Coherenceキャッシュに格納された構成オプションは、アプリケーションJARまたはDockerイメージのリビルドを強いられることなく変更できます。
  • 値は1箇所で変更でき、すべてのメンバーで自動的に認識され、最新になります。

前述の機能によって非常に多くの柔軟性が得られますが、必ずしも望ましいとはかぎりません。したがって、この機能はデフォルトでは無効になっています。

有効にする場合は、キャッシュ構成ファイルにグローバル・インターセプタとしてCoherenceConfigSourceを登録して明示的に有効にする必要があります:
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
              xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">

  <interceptors>
    <interceptor>
      <instance>
        <class-name>com.oracle.coherence.mp.config.CoherenceConfigSource</class-name>
      </instance>
    </interceptor>
  </interceptors>

  <!-- your cache mappings and schemes... -->

</cache-config>

この機能を有効にすると、キャッシュ・ファクトリが初期化されるとすぐにCoherenceConfigSourceがアクティブ化され、標準MP構成APIを介してアプリケーションで使用する使用可能な構成ソースのリストに挿入されます。

デフォルトでは、優先度(序数)が500で構成され、すべての標準構成ソースよりも優先度が高くなるため、構成ファイル、環境変数およびシステム・プロパティを介して提供される値をオーバーライドできます。ただし、その動作を完全に制御でき、coherence.mp.config.source.ordinal構成プロパティを使用して別の序数を指定できます。

CoherenceでのHelidon MicroProfileの使用例

Coherence MicroProfileとHelidonの統合の使用方法を示す多くのオープン・ソース・サンプル・アプリケーションがあります。

サンプル・アプリケーションの詳細は、次の項目を参照してください:

  • Helidon Sock Shop

    このプロジェクトは、スケーラブルな埋込みデータ・ストアとしてOracle Coherence Community Editionを使用し、アプリケーション・フレームワークとしてHelidon MPを使用するステートフルなマイクロサービス・ベースのアプリケーションの実装です

    これを使用する場合は、Coherence Helidon Sock Shopのサンプルを参照してください。

  • Todoリストの例

    このリポジトリには、Coherence Community Editionを紹介するために様々な言語で記述された一連の簡単なタスク管理の例が含まれています。

    特に、Javaディレクトリには、CoherenceとHelidon MicroProfileの統合方法が示されています。

    これを使用する場合は、Todoリストの例を参照してください。