12.8. 2 次キャッシュ

12.8.1. 2 次キャッシュ

2 次キャッシュとは、アプリケーションセッション外部で永続化された情報を保持するローカルデータストアのことです。このキャッシュは永続プロバイダーにより管理され、アプリケーションとデータを分離することでランタイムを改善します。

JBoss EAP では、以下の目的のためにキャッシュがサポートされます。

  • Web セッションのクラスターリング
  • ステートフルセッション Bean のクラスターリング
  • SSO クラスターリング
  • Hibernate 2 次キャッシュ
  • Jakarta Persistence 2 次キャッシュ
警告

各キャッシュコンテナーは repl および dist キャッシュを定義します。これらのキャッシュは、ユーザーアプリケーションで直接使用しないでください。

12.8.1.1. デフォルトの 2 次キャッシュプロバイダー

Infinispan は、JBoss EAP のデフォルトの 2 次キャッシュプロバイダーです。Infinispan は、オプションのスキーマを持つ分散型のインメモリーキーと値のデータストアで、Apache License 2.0 で利用できます。

12.8.1.1.1. 永続ユニットでの 2 次レベルキャッシュの設定
注記

今後の JBoss EAP リリースとの互換性を確保するには、persistence.xml プロパティーのオーバーライドではなく、Infinispan サブシステムを使用してキャッシュ設定をカスタマイズする必要があります。

永続ユニットの shared-cache-mode 要素を使用して 2 次レベルキャッシュを設定できます。

  1. 単純な Jakarta Persistence アプリケーションの作成 を参照して、Red Hat CodeReady Studio で persistence.xml ファイルを作成します。
  2. 以下の内容を persistence.xml ファイルに追加します。

    <persistence-unit name="...">
      (...) <!-- other configuration -->
      <shared-cache-mode>SHARED_CACHE_MODE</shared-cache-mode>
      <properties>
        <property name="hibernate.cache.use_second_level_cache" value="true" />
        <property name="hibernate.cache.use_query_cache" value="true" />
      </properties>
    </persistence-unit>

    SHARED_CACHE_MODE 要素には以下の値を指定できます。

    • ALL: すべてのエンティティーがキャッシュ可能と見なされます。
    • NONE: キャッシュ可能と見なされるエンティティーはありません。
    • ENABLE_SELECTIVE: キャッシュ可能とマークされたエンティティーのみがキャッシュ可能と見なされます。
    • DISABLE_SELECTIVE: 明示的にキャッシュ不可能であるとマークされたエンティティーを除くすべてのエンティティーがキャッシュ可能と見なされます。
    • UNSPECIFIED: 動作は定義されません。プロバイダー固有のデフォルトは提供されます。

例: persistence.xml を使用した エンティティー キャッシュと ローカルクエリー キャッシュのプロパティー変更

<persistence ... version="2.2">
    <persistence-unit ...>
        ...
        <properties>
            <!-- Values below are not recommendations. Appropriate values should be determined based on system use/capacity. -->

            <!-- entity default overrides -->
            <property name="hibernate.cache.infinispan.entity.memory.size" value="5000"/>
            <property name="hibernate.cache.infinispan.entity.expiration.max_idle" value="300000"/> <!-- 5 minutes -->
            <property name="hibernate.cache.infinispan.entity.expiration.lifespan" value="1800000"/> <!-- 30 minutes -->
            <property name="hibernate.cache.infinispan.entity.expiration.wake_up_interval" value="300000"/>  <!-- 5 minutes -->

            <!-- local-query default overrides -->
            <property name="hibernate.cache.infinispan.query.memory.size" value="5000"/>
            <property name="hibernate.cache.infinispan.query.expiration.max_idle" value="300000"/> <!-- 5 minutes -->
            <property name="hibernate.cache.infinispan.query.expiration.lifespan" value="1800000"/> <!-- 30 minutes -->
            <property name="hibernate.cache.infinispan.query.expiration.wake_up_interval" value="300000"/> <!-- 5 minutes -->
        </properties>
    </persistence-unit>
</persistence>

表12.1 エンティティー キャッシュと ローカルクエリー キャッシュのプロパティー

プロパティー説明

memory.size

オブジェクトメモリーのサイズを示します。

expiration.max_idle

キャッシュエントリーがキャッシュ内に維持される最大アイドル時間 (ミリ秒単位) を示します。

expiration.lifespan

キャッシュエントリーの有効期限が切れるまでの最大有効期間 (ミリ秒単位) を示します。デフォルトは 60 秒です。-1 を使用すると、有効期限を無限に指定できます。

expiration.wake_up_interval

有効期限が切れたエントリーをキャッシュからパージするための後続の実行までの間隔 (ミリ秒単位) を示します。-1 を使用して有効期限を無効にすることができます。