JCache (Payara 4.1.153) - khasunuma/Payara GitHub Wiki

目次

1. 概要

このページでは Payara 4.1.153 の JCache 機能の使い方について説明します。 Payara の JSR 107 (JCache) 実装は Hazelcast です。

2. ドキュメント規約

このドキュメント全体で、パスの表現はすべて Unix/Linux ファイル・パス構造 (スラッシュ前置) を使用します。

3. アプリケーションで JCache を使用するには

以下のセクションでは JCache へのアクセス方法と使用方法をコードを交えて説明します。

3.1 JSR 107 CachingProvider および CacheManager へのアクセス

Cache を作成するには、CachingProviderCacheManager が必要です。Payara の埋め込み Hazelcast には CachingProviderCacheManager が JNDI で登録されており、これらを新たに作成する必要はありません。これらにアクセスするには、以下のようにいくつかのクラスをインポートし、2 つの変数を初期化します:

import javax.cache.spi.CachingProvider;
import javax.cache.CacheManager;
...
Context ctx = new InitialContext();
CachingProvider provider = (CachingProvider) ctx.lookup("payara/CachingProvider");
CacheManager manager = (CacheManager) ctx.lookup("payara/CacheManager");

インジェクションの利用

Payara に埋め込まれた CachingProviderCacheManager へアクセスするには、インジェクションを利用することも可能です。アプリケーションへのインジェクションは以下のように行います (注: war または jar は暗黙的または明示的に Bean Archive でなけければなりません。すなわち、Bean Definition アノテーションをふかした CDI Bean、EJB セッション Bean または beans.xml ファイルのいずれかが含まれている必要があります):

import javax.cache.CacheManager;
import javax.cache.spi.CachingProvider;
import javax.inject.Inject;
...
@Inject 
CacheManager manager;
@Inject
CachingProvider provider;

3.2 インジェクションを利用したキャッシュの作成

キャッシュの作成には CacheManagergetCache メソッド呼び出しか、またはインジェクションを利用することができます。インジェクションを利用してキャッシュを作成するには前述の Caching Provider と Cache Manager を使用します。

インジェクションを利用したキャッシュの作成は以下のように行います:

import javax.inject.Inject;
import javax.cache.Cache;
...
@Inject
Cache cache;

このキャッシュの名前はクラスの別名となります。この方法によるキャッシュの作成は JMX の統計と管理が有効になります。

3.2.1 インジェクションを利用したカスタム・キャッシュの作成

インジェクションを利用したキャッシュの作成時に名前やその他の属性を設定することも可能で、その場合は @NamedCache アノテーションを使用します。

キャッシュの作成時にカスタム値としてカンマ区切りのリストを NamedCache アノテーションのパラメータとして設定することもできます。

例えば、キャッシュをカスタム名と JMX 管理を有効にしてインジェクトする場合には以下のようにします:

import fish.payara.cdi.jsr107.impl.NamedCache;
import javax.inject.Inject;
import javax.cache.Cache;
...
@NamedCache(cacheName = "custom", managementEnabled = true)
@Inject
Cache cache;

パラメータの完全な配列に関しては 付録 セクションの NamedCache を参照してください。

3.3 JCache アノテーションの使い方

Payara で JCache アノテーションのすべてを利用できるようにするためには、インターセプターを実装する必要があります。 該当する JCache アノテーションは以下の通りです:

  • @CachePut - 特定のキーと値の組をキャッシュへ Put する。
  • @CacheRemove - 特定のキーと値の組をキャッシュから削除する。
  • @CacheResult - 特定のキーを持つ値を取得する。
  • @CacheRemoveAll - すべてのキーと値の組をキャッシュから削除する。
  • @CacheDefaults - CacheResult、CachePut、CacheRemove、CacheRemoveAll のクラスレベルでのデフォルト構成を許可する。
  • @CacheKey - メソッド引数がキャッシュのキーであるとマークする。
  • @CacheValue - メソッド引数がキャッシュの値であるとマークする。

4. 付録

4.1 NamedCache アノテーション

構成オプション 説明 既定値
String cacheName キャッシュ名を設定する。 インジェクトされるキャッシュから受け取るクラス別名
Class keyClass クラスのキャッシュ・キーを設定する。 Object.class
Class valueClass クラスのキャッシュ値を設定する。 Object.class
boolean statisticsEnabled JMX 統計を有効化または無効化する。 false
boolean managementEnabled JMX 管理を有効化または無効化する。 false
boolean readThrough 読み取りキャッシュを有効化または無効化する。true が設定された場合は CacheLoader ファクトリ・クラスを指定しなければならない。 false
boolean writeThrough 書き込みキャッシュを有効化または無効化する。true が設定された場合は CacheWriter ファクトリ・クラスを指定しなければならない。 false
Class cacheLoaderFactoryClass CacheLoader ファクトリ・クラスにキャッシュを追加する。 指定されない場合にはこのオプションは使用されない。
Class cacheWriterFactoryClass CacheWriter ファクトリ・クラスにキャッシュを追加する。 指定されない場合にはこのオプションは使用されない。
Class expiryPolicyFactoryClass ExpiryPolicy ファクトリ・クラスにキャッシュを追加する。 指定されない場合にはこのオプションは使用されない。
⚠️ **GitHub.com Fallback** ⚠️