35 基本的なCoherence JCacheタスクの実行
この章の内容は次のとおりです。
- JCacheプロバイダとしてのCoherenceの指定
META-INF/services/javax.cache.spi.CachingProvider
サービス定義は、javax.cache.Caching
ブートストラップ・クラスを使用するアプリケーションがデフォルトでCoherence JCacheプロバイダを使用することを保証します。 - Coherence JCacheキャッシュの作成
Coherence JCacheプロバイダは、ローカル、パーティション、パススルーおよびリモートの4つのキャッシュ・タイプをサポートしています。 - Coherence JCacheキャッシュの構成
CoherenceのJCacheベースのキャッシュは、キャッシュが作成される際にMutableConfiguration
クラスによってプログラムから構成されます。 - キャッシュ操作の実行
JCacheには、キャッシュとやりとりを行う多くの操作が含まれています。 - リードスルーおよびライトスルー・キャッシングの使用
JCacheは、キャッシュと外部リソースを統合するために、リードスルーおよびライトスルー・キャッシュの使用をサポートしています。 - JCache POF構成ファイルの構成
Coherence JCacheプロバイダはシリアライズにPOFを使用し、coherence-pof-config.xml
ファイルを必要とします。 - JCache管理情報の表示
CacheMXBean
およびCacheStatisticsMXBean
JMX MBeanを使用して収集されたCoherence JCacheおよび管理データの管理について理解します。
親トピック: Coherence JCache実装の使用
JCacheプロバイダとしてのCoherenceの指定
META-INF/services/javax.cache.spi.CachingProvider
サービス定義は、javax.cache.Caching
ブートストラップ・クラスを使用するアプリケーションがデフォルトでCoherence JCacheプロバイダを使用することを保証します。
coherence-jcache.jar
ライブラリにあります。この章の手順および例は、Coherence JCacheプロバイダがデフォルトのJCacheプロバイダであることを前提としています。ただし、アプリケーションは複数のキャッシュ・プロバイダを登録および使用できます。そのような場合、アプリケーションにはCoherence JCacheプロバイダを選択するオプションが複数あります。
ノート:
複数のJCacheプロバイダが登録されている場合、getCachingProvider()
またはgetCachingProvider(ClassLoader)
メソッドを使用するとキャッシュ例外が発生します。
最初のオプションは、デフォルトのキャッシュ・プロバイダをjavax.cache.spi.cachingprovider
システム・プロパティを使用してオーバーライドし、Coherence JCacheプロバイダ実装クラスの完全修飾名を指定する方法です。たとえば:
System.setProperty("javax.cache.spi.cachingprovider", "com.tangosol.coherence.jcache.CoherenceBasedCachingProvider");
システム・プロパティは、実行時にコマンド行で指定することもできます。たとえば、
-Djavax.cache.spi.cachingprovider=com.tangosol.coherence.jcache. CoherenceBasedCachingProvider
2番目のオプションは、Caching.getCachingProvider(String)
またはCaching.getCachingProvider(String, ClassLoader)
メソッドを使用して、明示的にCoherence JCacheプロバイダ実装を要求する方法です。たとえば:
CachingProvider cachingProvider = Caching.getCachingProvider( "com.tangosol.coherence.jcache.CoherenceBasedCachingProvider"); CacheManager cacheManager = cachingProvider.getCacheManager(); ...
複数のキャッシュ・プロバイダが登録されている場合は、getCachingProviders
メソッドを使用して登録済のプロバイダのリストを反復処理します。
最後のオプションとして、アプリケーションは直接Coherence JCacheプロバイダをインスタンス化することもできます。ただし、このオプションにはプロバイダ間の移植性はありません。次の例はCoherence JCacheプロバイダをインスタンス化します。
CachingProvider cachingProvider = new CoherenceBasedCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager();
親トピック: 基本的なCoherence JCacheタスクの実行
Coherence JCacheキャッシュの作成
この項には次のトピックが含まれます:
親トピック: 基本的なCoherence JCacheタスクの実行
ローカル・キャッシュの作成
アプリケーションは、ローカル・キャッシュを使用してデータをキャッシュできます。ローカル・キャッシュはCoherence JCacheプロバイダを使用する際のデフォルトのキャッシュ・タイプで、Coherenceローカル・キャッシュ・スキームに類似しています。ローカル・キャッシュはデータのバックアップを提供せず、アプリケーションが終了した後はデータは永続化されません。次の例では、JCache APIを使用してローカル・キャッシュを作成しています。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, String> config = new MutableConfiguration<String, String>(); config.setStoreByValue(true).setTypes(String.class, String.class); Cache<String, String> cache = cacheManager.createCache("MyCache", config);
ローカル・キャッシュは、jcache-local-service
サービスによって管理されるjcache-local-scheme
という名前のローカル・キャッシュ・スキームにマップされるjcache-local-*
キャッシュ名を使用するCoherence NamedCache
インスタンスを作成します。
親トピック: Coherence JCacheキャッシュの作成
パーティション・キャッシュの作成
アプリケーションは、Coherenceパーティション・キャッシュにデータをキャッシュできます。アプリケーション・プロセスは自動的にCoherenceクラスタに参加し、Coherenceはクラスタ全体のデータの分散およびバックアップを管理します。パーティション・キャッシュはいかなるアプリケーションのコードの変更も必要としないため、既存のJCacheアプリケーションは簡単にCoherenceパーティション・キャッシュを使用するように移行できます。
ノート:
パーティション・キャッシュは参照による格納セマンティクスをサポートしていません。
パーティション・キャッシュを作成するには、tangosol.coherence.jcache.configuration.classname
プロパティにpartitioned
を設定します。たとえば:
-Dcoherence.jcache.configuration.classname=partitioned
システム・プロパティは、何の値も指定されなかった場合のデフォルト値であり、ローカル・キャッシュが作成されるlocal
という値もサポートします。
パーティション・キャッシュは、jcache-partitioned-service
サービスによって管理されるjcache-partitioned-scheme
という名前のパーティション・キャッシュ・スキームにマップされるjcache-partitioned-*
キャッシュ名を使用するCoherence NamedCache
インスタンスを作成します。
オペレーション構成
JCacheアプリケーションは、tangosol-coherence-override.xml
オペレーション・オーバーライド・ファイルおよびCoherenceシステム・プロパティのいずれかまたは両方を使用してCoherenceオペレーション設定を構成する必要があります。とりわけこのオペレーション設定によって、アプリケーションは既存のクラスタへ参加できるようになります。オペレーション構成ファイルの指定を参照してください。たとえば、アプリケーションは実行時に次のシステム・プロパティを指定してCluster1
という名前でマルチキャスト・アドレス231.1.1.1
およびポート7574
を持つクラスタに参加できます。
-Dcoherence.cluster=Cluster1 -Dcoherence.clusteraddress=231.1.1.1 -Dcoherence.clusterport=7574
キャッシュ構成
JCache用のパーティション・キャッシュは、自動的にcoherence-jcache.jar
ライブラリに含まれるデフォルトのCoherenceキャッシュ構成ファイルを使用します。この構成ファイルの名前はcoherence-jcache-cache-config.xml
です。クラスタ内のキャッシュ・サーバーは、coherence-jcache-cache-config.xml
ファイルも使用する必要があります。たとえば、キャッシュ・サーバーはcoherence.cacheconfig
システム・プロパティを使用して明示的にキャッシュ構成ファイルを設定できます。
-Dcoherence.cacheconfig=coherence-jcache-cache-config.xml
既存のCoherenceキャッシュ構成ファイルも使用できます。JCacheからのCoherence固有の機能の使用を参照してください。
親トピック: Coherence JCacheキャッシュの作成
パススルー・キャッシュの作成
アプリケーションは、パススルー・キャッシュを使用してすべてのキャッシュ操作を既存のCoherenceキャッシュに委任できます。パススルー・キャッシュを使用すると、Coherence固有のNamedCache
インスタンスをJCacheインタフェースから使用することになります。パススルー・キャッシュによって、アプリケーションはすべてのCoherence固有の機能および構成をフル活用できます。
パススルー・キャッシュを作成するためには、アプリケーションはCoherenceのPassThroughCacheConfiguration
JCache構成オブジェクトを使用し、Coherenceキャッシュ構成ファイルで定義されている既存のキャッシュ・マッピングの名前を指定することができます。たとえば:
... CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); PassThroughCacheConfiguration<String, Object> config = new PassThroughCacheConfiguration<String, Object>(); config.setTypes(String.class, Object.class); Cache<String, Object> cache = cacheManager.createCache("MyCache", config);
代替として、既存のJCacheアプリケーションではMutableConfiguration
オブジェクトを使用し続けて、coherence.jcache.configuration.classname
プロパティを指定してその値をpassthrough
に設定することで、パススルー・キャッシュを作成することができます。たとえば:
-Dcoherence.jcache.configuration.classname=passthrough
システム・プロパティにより、JCacheアプリケーションはアプリケーション・コードを変更することなくCoherenceネイティブ機能を使用することができます。ただし、ほとんどのMutableConfiguration
オブジェクト・プロパティは無視されます。システム・プロパティを使用してパススルー・キャッシュを作成すると、警告メッセージが出力されます。
WARNING: Lossy conversion of configuration javax.cache.configuration.MutableConfiguration to a PassThroughConfiguration. Most properties from class javax.cache.configuration.MutableConfiguration are ignored. Configure PassThroughCache using native Coherence configuration methodologies.
オペレーション構成
JCache用のパススルー・キャッシュは、tangosol-coherence-override.xml
オペレーション・オーバーライド・ファイルおよびCoherenceシステム・プロパティのいずれかまたは両方を使用してCoherenceオペレーション設定を構成します。とりわけこのオペレーション設定によって、アプリケーションは既存のクラスタへ参加できるようになります。オペレーション構成ファイルの指定を参照してください。
キャッシュ構成
JCache用のパススルー・キャッシュは、既存のCoherenceキャッシュ構成ファイルを使用します。アプリケーションは、実行時にcoherence.cacheconfig
プロパティを使用してファイルの場所を指定できます。たとえば:
-Dcoherence.cacheconfig=my-cache-config.xml
前述の方法によってキャッシュ・マネージャが使用するデフォルトURIが変更され、指定されたキャッシュ構成ファイルが取得されます。JCache APIを使用し、システム・プロパティの設定に依存せずにキャッシュ構成を指定する別の方法は、キャッシュ・マネージャを作成する際にURIを指定する方法です。たとえば:
Caching.getCacheManager(new URI(my-cache-config.xml), null, null);
前述の方法で返されたキャッシュ・マネージャから作成されたすべてのキャッシュは、getCacheManager
の呼出しで指定されたキャッシュ構成ファイルを使用します。キャッシュ構成ファイルの指定を参照してください。
親トピック: Coherence JCacheキャッシュの作成
リモート・キャッシュの作成
アプリケーションは、リモートのCoherenceパーティション・キャッシュにデータをキャッシュできます。アプリケーション・プロセスは、クラスタ上のCoherenceプロキシ・サービスに接続し、Coherenceはクラスタ全体のデータの分散およびバックアップを管理します。リモート・キャッシュは、Coherence*Extendに依存します。Oracle Coherenceリモート・クライアントの開発のCoherence*Extendの概要を参照してください。リモート・キャッシュはいかなるアプリケーションのコードの変更も必要としないため、既存のJCacheアプリケーションは簡単にCoherenceリモート・キャッシュを使用するように移行できます。
リモート・キャッシュを作成するには、tangosol.coherence.jcache.configuration.classname
プロパティにremote
を使用します。たとえば:
-Dcoherence.jcache.configuration.classname=remote
リモート・キャッシュにより、jcache-extend-tcp
という名前のリモート・キャッシュ・スキームにマップされるjcache-extend-*
キャッシュ名を使用するCoherence NamedCache
のインスタンスが作成されます。キャッシュは、TCPProxyService
という名前のプロキシ・サービスを使用してクラスタに接続するように構成されます。
オペレーション構成
JCacheアプリケーションは、必要に応じて、tangosol-coherence-override.xml
オペレーション・オーバーライド・ファイルおよびCoherenceシステム・プロパティのいずれかまたは両方を使用して、Coherenceオペレーション設定を構成する必要があります。オペレーション構成ファイルの指定を参照してください。
キャッシュ構成
JCache用のリモート・キャッシュは、coherence-jcache.jar
ライブラリに含まれるデフォルトのCoherenceキャッシュ構成ファイルを自動的に使用します。この構成ファイルの名前はcoherence-jcache-extendclient-cache-config.xml
です。さらに、クラスタ内の少なくとも1つのキャッシュ・サーバーが、プロキシ・サービスを定義するcoherence-jcache-server-proxy-cache-config.xml
ファイルを使用する必要があります。たとえば、キャッシュ・サーバーはcoherence.cacheconfig
システム・プロパティを使用して明示的にキャッシュ構成ファイルを設定できます。
-Dcoherence.cacheconfig=coherence-jcache-server-proxy-cache-config.xml
既存のCoherenceキャッシュ構成ファイルの使用も選択できます。JCacheからのCoherence固有の機能の使用を参照してください。
親トピック: Coherence JCacheキャッシュの作成
JCacheからのCoherence固有の機能の使用
Coherence JCacheプロバイダによって、アプリケーションはCoherence固有の機能を使用できます。Coherence固有の機能を使用するアプリケーションには、JCacheプロバイダ間の移植性はありません。一般的に、アプリケーションは既存のCoherenceの実装および構成を再利用するために固有の機能を使用します。
この項には次のトピックが含まれます:
JCacheからのNamedCacheインスタンスへのアクセス
JCacheアプリケーションは、キャッシュの基礎となるCoherence NamedCache
インスタンスに直接アクセスできます。NamedCache
とJCache APIを入れ替えて使用することによってキャッシュに直接アクセスすることはできません。さらに、NamedCache
インスタンスを使用してキャッシュのキーおよび値にアクセスすると、Coherence JCacheプロバイダ実装によって提供される追加の動作はバイパスされます。
次の例は、JCacheキャッシュの基礎となるNamedCache
インスタンスに直接アクセスし、エントリの挿入および取得を行うためにインスタンスを使用しています。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, String> config = new MutableConfiguration<String, String>(); config.setStoreByValue(true).setTypes(String.class, String.class); Cache<String, String> cache = cacheManager.createCache("MyCache", config); String key = "k"; String value = "Hello World"; NamedCache nc = cache.unwrap(NamedCache.class); nc.put(key, value); System.out.println("The value is " + nc.get(key) + "\n"); nc.destroy(); cacheManager.close();
親トピック: JCacheからのCoherence固有の機能の使用
JCacheでのCoherence構成の使用
JCacheに同等なものがないCoherence固有の概念(失効など)は、Coherenceキャッシュ構成ファイル、オペレーション・オーバーライド・ファイルまたはCoherenceシステム・プロパティを使用して構成できます。
ノート:
JCacheプロバイダ実装間で移植性を持つように設計されているアプリケーションは、JCache CompleteConfiguration
APIが提供する構成のみに依存する必要があります。
既存のCoherenceキャッシュ構成ファイルをJCacheパーティションおよびローカル・キャッシュに使用する場合は、ファイルにjcache
ネームスペース・ハンドラ定義を含める必要があります。たとえば:
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config" xmlns:jcache="class://com.tangosol.coherence.jcache.JCacheNamespace" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd"> ...
JCacheネームスペース・ハンドラは、JCache固有のキャッシュ構成ファイルに必要なすべての欠落している要素を生成し、アプリケーションが標準キャッシュ構成ファイルを拡張できるようにします。すでにキャッシュ構成ファイルで定義されている場合、JCacheネームスペース・ハンドラは要素を生成しません。
親トピック: JCacheからのCoherence固有の機能の使用
Coherence JCacheキャッシュの構成
MutableConfiguration
クラスによってプログラムから構成されます。これは標準のJCacheクラスであり、JCacheプロバイダ間で移植性を維持するために使用する必要があります。たとえば:
MutableConfiguration<String, String> config = new MutableConfiguration<String, String>(); config.setStoreByValue(true).setTypes(String.class, String.class); Cache<String, String> cache = cacheManager.createCache("MyCache", config);
ローカルおよびパーティション・キャッシュを使用するアプリケーションは、オプションでJCache CompleteConfiguration
APIのCoherence JCacheプロバイダ固有の実装を使用できます。この実装は、それぞれLocalCacheConfiguration
およびPartitionedCacheConfiguration
です。ただし、これらのクラスはJCacheプロバイダ間の移植性はありません。たとえば:
PartitionedCacheConfiguration<String, String> config = new PartitionedCacheConfiguration<String, String>(); config.setStoreByValue(true).setTypes(String.class, String.class);
パススルー・キャッシュを使用するアプリケーションには、Coherence JCacheプロバイダPassThroughCacheConfiguration
構成クラスが必要です。パススルー・キャッシュはCoherence固有の構成を使用して構成されるため、JCache固有の構成オプションの使用はサポートしません。
PassThroughCacheConfiguration<String, String> config = new PassThroughCacheConfiguration<String, String>();
この項には次のトピックが含まれます:
親トピック: 基本的なCoherence JCacheタスクの実行
格納セマンティクスの設定
JCacheは、キャッシュが参照による格納と値による格納のどちらのセマンティクスを使用するかを指定するオプションを提供しています。setStoreByValue
メソッドは、キーと値両方の格納セマンティクスを構成します。true
は値による格納セマンティクスを、false
は参照による格納セマンティクスを示します。Coherence JCacheプロバイダは、すべてのキャッシュ・タイプにおいてデフォルトで値による格納セマンティクスを使用し、ローカル・キャッシュにおいてのみ参照による格納をサポートしています。パーティション・キャッシュは参照による格納をサポートしていません。さらに、すべてのCoherence JCacheキャッシュ・タイプで、プロバイダは値による格納セマンティクスの実装にJavaシリアライズまたはPOFのどちらかを使用しています。ローカル・キャッシュで参照による格納を構成しているアプリケーションは、キーと値がシリアライズ可能またはPOFが有効化されている必要はありません。
次の例では、ローカル・キャッシュで参照による格納セマンティクスを使用するように構成しています。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, Integer> config = new MutableConfiguration<String, Integer>(); config.setStoreByValue(false); Cache<String, Integer> cache = cacheManager.createCache("MyCache", config);
ノート:
参照による格納が有効な場合は、キャッシュへの参照を保持しているスレッドによってキャッシュが変更される可能性があります。変更されたキーは取得できない可能性があります。さらに、Javaのパーミッションが正しく設定されていない場合は、JVM内のすべてのスレッドが変更された値を監視できる可能性があります。ローカル・ヒープを超えるとエントリはある形式に変換され、この変換以後に発生した変更はキャッシュに反映されない可能性があります。
親トピック: Coherence JCacheキャッシュの構成
キャッシュ・エントリの型の設定
JCacheでは、エントリのキーと値の型を設定できます。その後、キャッシュに配置されるすべてのエントリは、宣言された型に従う必要があります。そうでない場合は、ランタイム例外が発生します。setTypes
メソッド(null
の設定は不可)が、エントリの型を構成するために使用されます。次の例では、キーの型をString
に、値の型をInteger
に設定しています。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, Integer> config = new MutableConfiguration<String, Integer>(); config.setTypes(String.class, Integer.class); Cache<String, Integer> cache = cacheManager.createCache("MyCache", config);
ノート:
Coherence JCache実装では、キャッシュを変更する操作に渡されるオブジェクトが、javax.cache.configuration.Configuration
APIで構成された内容と一致することを確認する実行時チェックは行われません。アプリケーションはキャッシュを操作するためにジェネリクスを使用し、コンパイル時の静的なチェックを活用する必要があります。
型が構成されていない場合、デフォルトのキーと値の型はObject.class
です。デフォルトの型を使用するか、または明示的にObject.class
型を構成した場合、実行時の型チェックは無効になり、アプリケーションは任意のキーまたは値の型を使用できるようになります。ただし、その場合は、型の安全性の保証はアプリケーションの責任です。次の例では、明示的にキーと値のタイプをObject.class
に設定し、キャッシュを取得する際の型パラメータを省略することによって、型チェックを無効化しています。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<Object, Object> config = new MutableConfiguration<Object, Object>(); config.setStoreByValue(true).setTypes(Object.class, Object.class); Cache<Object, Object> cache = cacheManager.getCache("MyCache");
必須ではありませんが、前述の例はコンパイル時の型チェックも使用しています。省略された場合、コンパイラは型の安全性をチェックしません。次の例では、コンパイル時と実行時の両方の型チェックを無効化しています。
MutableConfiguration config = new MutableConfiguration(); cacheManager.createCache("MyCache", config);
親トピック: Coherence JCacheキャッシュの構成
キャッシュ失効の設定
JCacheでは、エントリがキャッシュの中で使用可能な時間を構成できます。失効したエントリは有効ではなく、アプリケーションが使用することはできません。
ノート:
Coherence JCacheプロバイダは、最大キャッシュ容量に到達している場合、失効する予定がないエントリを削除する可能性があります。キャッシュ・エントリは、エントリのアクセス頻度および最終アクセス日時の組合せに基づくデフォルトのエビクション・ポリシーによって削除されます。アクセス頻度が最も低いエントリおよびアクセスされていない期間が最も長いエントリが最初に削除されます。
失効は、失効ポリシーおよび時間値を選択するsetExpiryPolicyFactory
メソッドを使用して構成されます。次の例では、キャッシュ内のエントリを作成されてから5分で失効するように構成しています。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, Integer> config = new MutableConfiguration<String, Integer>(); config.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf( Duration.FIVE_MINUTES)); Cache<String, Integer> cache = cacheManager.createCache("MyCache", config);
ポリシーがnull
に設定されるか、失効が構成されていない場合、デフォルトで永続ポリシーが使用され、エントリは失効しません。各ポリシーでは、キャッシュ・エントリが失効とみなされる前に経過する必要がある期間を指定できます。便宜上、ZERO
、ONE_MINUTE
、FIVE_MINUTES
、TEN_MINUTES
、TWENETY_MINUTES
、THIRTY_MINUTES
、ONE_HOUR
およびONE_DAY
という定義済の期間が提供されています。任意の負でない期間の値を構成できます。
次の失効ポリシーがサポートされています:
-
作成 – キャッシュ・エントリは、作成日時に基づいて失効します。更新によって失効日時がリセットされることはありません。このポリシーは、JCacheの
CreatedExpiryPolicy
クラスで実装されています。 -
アクセス – キャッシュ・エントリは、最終アクセス日時に基づいて失効します。アクセスには、キャッシュの更新は含まれません。このポリシーは、JCacheの
AccessedExpiryPolicy
クラスで実装されています。 -
変更 – キャッシュ・エントリは、最終更新日時に基づいて失効します。更新には、エントリの作成および変更(更新)が含まれます。このポリシーは、JCacheの
ModifiedExpiryPolicy
クラスで実装されています。 -
タッチ – 最後にタッチされた日時に基づくキャッシュ・エントリです。タッチには、作成、更新またはアクセスが含まれます。このポリシーは、JCacheの
TouchedExpiryPolicy
クラスで実装されています。 -
永続(デフォルト) – キャッシュ・エントリは失効しません。このポリシーは、JCacheの
EternalExpiryPolicy
クラスで実装されています。
失効ポリシーおよび期間は、分散キャッシュ・シナリオをサポートするためにシリアライズされる必要があります。Coherence JCacheプロバイダはシリアライズにPortable Object Format (POF)を使用し、プロバイダには失効タイプ用のPOFシリアライザが含まれています。パーティション・キャッシュがパススルー・キャッシュとともに使用されている場合は、Coherence JCacheプロバイダがこれらのタイプを使用できるように構成する必要があります。JCache POF構成ファイルの構成を参照してください。
親トピック: Coherence JCacheキャッシュの構成
リードスルーおよびライトスルー・キャッシングの有効化
リードスルーおよびライトスルー・キャッシングを使用すると、アプリケーションはデータ・ソースからキャッシュへのデータのロードや、キャッシュからデータ・ソースへのデータの書込みができるようになります。データ・ソースはデータベースと統合するのが最も一般的ですが、すべてのデータ・ソースはJCacheのキャッシュと統合できます。リードスルーおよびライトスルー・キャッシングはデフォルトでは有効でなく、JCacheのCacheLoader
およびCacheWriter
インタフェースそれぞれにアプリケーション固有の実装が必要となります。
リードスルーおよびライトスルー・キャッシングを有効にするには、setReadThrough
およびsetWriteThrough
メソッドをそれぞれtrue
に設定します。たとえば:
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, Integer> config = new MutableConfiguration<String, Integer>(); config.setReadThrough(true).setWriteThrough(true); Cache<String, Integer> cache = cacheManager.createCache("MyCache", config);
CacheLoader
およびCacheWriter
の実装を登録するには、それぞれsetCacheLoaderFactory
およびsetCacheWriterFactory
メソッドを使用し、実装クラスの完全修飾名を入力します。たとえば:
cacheWriter = new MyCacheWriter(); cacheLoader = new MyCacheLoader(); MutableConfiguration<String, Integer> config = new MutableConfiguration<String, Integer>(); config.setReadThrough(true).setWriteThrough(true) .setCacheWriterFactory(FactoryBuilder.factoryOf(cacheWriter)); .setCacheLoaderFactory(FactoryBuilder.factoryOf(cacheLoader)); Cache<String, Integer> cache = cacheManager.createCache("MyCache", config);
この実装は、あるキャッシュ操作を行った際に自動的に使用されます。詳細は、リードスルーおよびライトスルー・キャッシングの使用を参照してください。
親トピック: Coherence JCacheキャッシュの構成
管理の有効化
JCacheは、CacheMXBean
およびCacheStatisticsMXBean
という2つの動的MBeanを提供しています。CacheMXBean
MBeanは、キャッシュの構成設定を表示します。CacheStatisticsMXBean
MBeanは、キャッシュのパフォーマンス統計を表示します。JCache管理情報の表示を参照してください。
管理はデフォルトで無効になっています。管理情報を有効化するには、キャッシュを構成する際にsetManagementEnabled
およびsetStatisticsEnabled
メソッドをtrue
に設定します。たとえば:
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration config = new MutableConfiguration(); config.setManagementEnabled(true).setStatisticsEnabled(true); Cache cache = cacheManager.createCache("MyCache", config);
管理は、実行時にキャッシュ・マネージャを使用して有効化することもできます。
CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration config = new MutableConfiguration(); Cache cache = cacheManager.createCache("MyCache", config); cacheManager.enableManagement("MyCache", true); cacheManager.enableStatistics("MyCache", true);
親トピック: Coherence JCacheキャッシュの構成
キャッシュ操作の実行
javax.cache.Cache
インタフェースで定義されています。すべての使用可能なJCacheの操作のセマンティクスおよび詳細は、Cache
APIドキュメントを参照してください。
キャッシュ操作を行う前に、まずキャッシュの作成および構成を行う必要があります。次の例では、単純なput
およびget
操作を実行します:
ノート:
キーと値はnull
にはできません。
CachingProvider provider = Caching.getCachingProvider(); CacheManager cacheManager = provider.getCacheManager(); MutableConfiguration config = new MutableConfiguration(); Cache cache = cacheManager.createCache("MyCache", config); cache.put("k1", "Hello World"); System.out.println("The value is " + cache.get("k1")+ "\n");
前述の例では、コンパイル時または実行時のエントリの型チェックは行われません。キャッシュ・エントリの型の設定を参照してください。
CoherenceのJCache操作の理解
キャッシュ操作の実装は、LocalCache
、PartitionedCache
およびPassThroughCache
の各キャッシュ・タイプによって異なります。たとえば、パーティション・キャッシュの操作は、Coherenceのデータ・シリアライズの利点を活用できるCoherenceエントリ・プロセッサによって実装されています。各キャッシュ・タイプは、使用するキャッシュ・トポロジの利点を活用できるキャッシュ操作の実装を提供しています。
親トピック: 基本的なCoherence JCacheタスクの実行
リードスルーおよびライトスルー・キャッシングの使用
CacheLoader
およびCacheWriter
インタフェースを実装している必要があります。リードスルーおよびライトスルー・キャッシングは、デフォルトでは有効になっていません。詳細は、リードスルーおよびライトスルー・キャッシングの有効化を参照してください。
ノート:
Coherenceパススルー・キャッシュを使用するアプリケーションは、Coherenceでリードスルーおよびライトスルー・キャッシングをネイティブに使用でき、JCache固有のローダーおよびライターの実装を含める必要はありません。
この項には次のトピックが含まれます:
リードスルー実装の提供
リードスルー・キャッシングを使用するには、アプリケーションはCacheLoader
インタフェースを実装する必要があります。実装の詳細は、使用する外部リソースに固有です。CacheLoader
メソッドの実装の詳細は、JCache APIドキュメントを参照してください。
CacheLoader
インタフェースは、load
およびloadAll
メソッドを提供しています。これらのメソッドは、実装が外部リソースに接続してそこから値または一連の値を取得するために必要なロジックを含める目的で使用されます。get
、getAll
、getAndRemove
またはgetAndReplace
操作の結果、指定されたキーのエントリが見つからない場合にキャッシュ・ローダーの実装が毎回自動的に起動されます。エントリ・プロセッサを使用し、そのエントリ・プロセッサがgetValue
メソッドを使用する場合、invoke
およびinvokeAll
操作によって自動的にキャッシュ・ローダーが使用されます。JCacheエントリの処理を参照してください。
親トピック: リードスルーおよびライトスルー・キャッシングの使用
キャッシュの事前ロード
Cache
APIには、キャッシュの事前ロードに使用されるCache.loadAll
メソッドが含まれています。このメソッドを使用すると、CacheLoader
実装のloadAll
メソッドが呼び出されます。この場合でもCacheLoader
の実装はキャッシュ上で構成される必要がありますが、リードスルー・キャッシングが有効化されている必要はありません。たとえば:
cacheLoader = new MyCacheLoader(); MutableConfiguration<String, String> config = new MutableConfiguration<String, String>(); config.setTypes(String.class, String.class) .setReadThrough(false) .setCacheLoaderFactory(FactoryBuilder.factoryOf(cacheLoader));
前述の例では、factoryOf
メソッドはMyCacheLoader
の実装のインスタンスを受け取っています。このメソッドは、状態を持ち実装クラスがシリアライズ可能である必要がある実装に使用されます。実装に状態がない場合は、かわりにfactoryOf(Class)
またはfactoryOf(String classname)
メソッドを使用することをお薦めします。
外部リソースからのキャッシュのロードが完了するまでには、長い時間がかかる可能性があります。CompletionListener
インタフェースを使用すると、アプリケーションはキャッシュがロードされた場合またはキャッシュのロード時に例外が発生した場合に通知を受けることができます。CompletionListenerFuture
クラスは、必要に応じて使用できるデフォルトの実装です。たとえば:
cacheLoader = new MyCacheLoader(); MutableConfiguration<String, String> config = new MutableConfiguration<String, String>(); config.setTypes(String.class, String.class) .setReadThrough(false) .setCacheLoaderFactory(FactoryBuilder.factoryOf(cacheLoader)); Cache<String, String> cache = cacheManager.createCache("MyCache", config); CompletionListenerFuture future = new CompletionListenerFuture(); cache.loadAll(keys, true, future);
親トピック: リードスルーおよびライトスルー・キャッシングの使用
ライトスルー実装の提供
ライトスルー・キャッシングを使用するには、アプリケーションはCacheWriter
インタフェースを実装する必要があります。実装の詳細は、使用する外部リソースに固有です。CacheWriter
メソッドの実装の詳細は、JCache APIドキュメントを参照してください。
CacheWriter
インタフェースは、エントリを外部リソースに書き込むメソッド(write
およびwriteAll
)および外部リソースからエントリを削除するメソッド(delete
およびdeleteAll
)を提供しています。これらのメソッドは、実装が外部リソースに接続してそのデータを更新するために必要なロジックを含める目的で使用されます。キャッシュ・ライターの実装は、put
、putAll
、putIfAbsent
、remove
、removeAll
、replace
、getAndPut
、getAndRemove
、getAndReplace
、invoke
およびinvokeAll
のキャッシュ操作が行われると、毎回自動的に起動されます。
親トピック: リードスルーおよびライトスルー・キャッシングの使用
JCache POF構成ファイルの構成
coherence-pof-config.xml
ファイルを必要とします。JCache固有のPOFタイプは、coherence-jacache.jar\coherence-jcache-pof-config.xml
POF構成ファイルで定義されています。パーティション・キャッシュをパススルー・キャッシュとともに使用している場合、POF構成ファイルの一部にJCache POFタイプが含まれている必要があります。たとえば:
<pof-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-pof-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-pof-config coherence-pof-config.xsd"> <user-type-list> <include>coherence-pof-config.xml</include> <include>coherence-jcache-pof-config.xml</include> ...
POF構成ファイルの指定を参照してください。
親トピック: 基本的なCoherence JCacheタスクの実行
JCache管理情報の表示
CacheMXBean
およびCacheStatisticsMXBean
JMX MBeanを使用して収集されたCoherence JCacheおよび管理データの管理について学習します。この項には次のトピックが含まれます:
- JCache管理情報の概要
- JCache CacheConfiguration MBeanの理解
- JCache CacheStatistics MBeanの理解
- パーティション・キャッシュ統計のリフレッシュ間隔の変更
親トピック: 基本的なCoherence JCacheタスクの実行
JCache管理情報の概要
Coherence JCacheプロバイダは、CacheMXBean
およびCacheStatisticsMXBean
の両方の動的MBeanインタフェースを実装しています。このインタフェースは、次の管理情報を提供します:
-
CacheMXBean
– キャッシュの構成情報を報告します。各構成オプションおよび現在の設定が、属性としてリストされます。 -
CacheStatisticsMXBean
– キャッシュのパフォーマンス情報を報告します。パフォーマンス統計は属性としてリストされ、キャッシュで発生する可能性がある問題のトラブルシューティングに使用できます。
管理情報は、デフォルトでは有効化されていません。管理の有効化を参照してください。
ノート:
パススルー・キャッシュの管理情報は、Coherence固有のJMX管理の実装を使用して報告されます。Oracle Coherenceの管理のJMXを使用したOracle Coherenceの管理を参照してください。
Coherence JCache MBean
管理情報は、JDK (JDK_HOME
/bin/jvisualvm
)に含まれているJava VisualVMコンソールなどのすべてのJMX MBean対応のブラウザで表示できます。ローカルおよびパーティション・キャッシュの管理MBeanは、デフォルトのMBeanサーバーに登録され、javax.cache
のJMXブラウザ内にあります。
Coherence-Java VisualVMプラグイン
JCache管理情報はCoherence-Java VisiualVMプラグインを使用して表示することができます。プラグインには、経時的な管理情報を集計し、構成およびパフォーマンスの問題のトラブルシューティングに使用するJCacheタブが含まれています。Oracle Coherenceの管理のCoherence-JVisualVMプラグインを使用したCoherenceクラスタのモニターを参照してください。
Coherenceレポート
JCache管理情報はCoherenceレポートを使用して表示することもできます。Coherence JCacheレポートは、経時的な管理情報を集計し、構成およびパフォーマンスの問題のトラブルシューティングに使用されます。Oracle Coherenceの管理のJCache構成レポートの理解およびJCache統計レポートの理解を参照してください。
親トピック: JCache管理情報の表示
JCache CacheConfiguration MBeanの理解
CoherenceCacheMXBean
クラスはCacheMXBean
インタフェースを実装し、キャッシュの構成情報を提供します。MBeanオブジェクトは各キャッシュに登録されます。MBeanのオブジェクト名は次のようになります。
javax.cache:type=CacheConfiguration,CacheManager=coherence-jcache-cache-config.xml,Cache=
cache_name
この項には次のトピックが含まれます:
JCache CacheConfiguration MBeanの属性
表35-1に、CacheConfiguration
MBeanの属性を示します。
表35-1 CacheConfiguration MBeanの属性
属性 | 型 | アクセス | 説明 |
---|---|---|---|
|
|
read-only |
キャッシュが必要とするキーの型です。必要とされるキーの型が構成されていない場合のデフォルトの値は、 |
|
|
read-only |
キャッシュの管理が有効化されているかどうかを示します。デフォルト値は |
|
|
read-only |
キャッシュ操作がリードスルー・モードかどうかを示します。デフォルト値は |
|
|
read-only |
キャッシュのパフォーマンス統計が収集されているかどうかを示します。デフォルト値は |
|
|
read-only |
キャッシュが値による格納または参照による格納のどちらのセマンティクスを使用しているかを示します。デフォルト値は |
|
|
read-only |
キャッシュが必要とする値の型です。必要とされる値の型が構成されていない場合のデフォルトの値は、 |
|
|
read-only |
キャッシュ操作がライトスルー・モードかどうかを示します。デフォルト値は |
JCache CacheStatistics MBeanの理解
Coherence JCacheプロバイダには、JCacheのCacheStatisticsMXBean
インタフェースの2つの実装が含まれています。ContextJCacheStatistics
実装は、ローカル・キャッシュのパフォーマンス統計の収集に使用されます。PartitionedJCacheStatistics
は、Coherence内のすべての記憶域メンバーのパフォーマンス統計の収集および集計に使用されます。MBeanオブジェクトは各キャッシュに登録されます。MBeanのオブジェクト名は次のようになります。
javax.cache:type=CacheStatistics,CacheManager=coherence-jcache-cache-config.xml,Cache=
cache_name
この項には次のトピックが含まれます:
JCache CacheStatistics MBeanの属性
表35-2に、CacheStatistics
MBeanの属性を示します。
表35-2 キャッシュ統計属性
属性 | 型 | アクセス | 説明 |
---|---|---|---|
|
|
read-only |
|
|
|
read-only |
|
|
|
read-only |
|
|
|
read-only |
キャッシュからのエビクションの総数です。エビクションは、スペースを開放するため、キャッシュによって開始されます。エビクションは、 ノート: この属性は、Coherence JCacheプロバイダでは実装されていません。 |
|
|
read-only |
|
|
|
read-only |
エントリを返したキャッシュ・リクエストの割合です。この割合は、キャッシュ・ヒットをキャッシュの |
|
|
read-only |
成功した |
|
|
read-only |
エントリを返さなかったキャッシュ・リクエストの割合です。この割合は、キャッシュ・ミスをキャッシュの |
|
|
read-only |
成功しなかった |
|
|
read-only |
既存のエントリの置換操作を含むput操作の総数です。 |
|
|
read-only |
|
パーティション・キャッシュ統計のリフレッシュ間隔の変更
Coherence JCacheプロバイダは、パーティション・キャッシュのパフォーマンス統計のリフレッシュ・タイミングを決定するためにリフレッシュ間隔を使用します。リフレッシュは遅延して実行されます。統計は、リフレッシュ間隔に達して統計を取得する呼出しが行われた場合にのみリフレッシュされます。統計を取得する呼出しが行われない場合は、リフレッシュ間隔に達した場合でも統計はリフレッシュされません。
デフォルトのリフレッシュ間隔は3秒で、様々なクラスタ・サイズおよびネットワーク・パフォーマンスに対応するために変更できます。たとえば、多くの記憶域メンバーを持つクラスタでは、すべてのメンバーの統計の集計および恒常的な更新の回避のために、長いリフレッシュ間隔が必要かもしれません。
リフレッシュ間隔を変更するには、coherence.jcache.statistics.refreshtime
システム・プロパティを使用して、時間をミリ秒で設定します。次の例では、リフレッシュ間隔を5秒に構成しています。
-Dcoherence.jcache.statistics.refreshtime=5000
親トピック: JCache管理情報の表示