34 最初のCoherence JCacheアプリケーションの作成
Person
オブジェクト)をキャッシュに格納する単純なアプリケーションです。このサンプルでは、ローカル・キャッシュ、パーティション・キャッシュおよびパススルー・キャッシュの使用方法を示します。
Coherenceが初めての場合は、Coherence固有のNamedCache
の例の実行も検討してください。最初のCoherenceアプリケーションの作成を参照してください。
この章の内容は次のとおりです。
- タスク1: 単純なオブジェクトの作成
Coherence JCacheプロバイダを使用してキャッシュされる、単純なPerson
オブジェクトを作成します。 - タスク2: ローカル・キャッシュへのオブジェクトの格納
アプリケーションは、JCache APIを使用してキャッシュにアクセスし、キャッシュとやりとりします。 - タスク3: サンプル・クラスタの構成
パーティション・キャッシュおよびパススルー・キャッシュは、キャッシュ・データを分散させるためにCoherenceクラスタを使用します。 - タスク4: パーティション・キャッシュへのオブジェクトの格納
パーティション・キャッシュは、キャッシュ・エントリをCoherenceクラスタ内の任意の数のキャッシュ・サーバーに分散させるキャッシュです。 - タスク5: パススルー・キャッシュへのオブジェクトの格納
パススルー・キャッシュは、既存のCoherenceキャッシュ(Coherenceキャッシュ構成ファイルで定義されるキャッシュ)に委任するキャッシュです。
親トピック: Coherence JCache実装の使用
タスク1: 単純なオブジェクトの作成
Person
オブジェクトを作成します。Person
オブジェクトには、コンストラクタと、姓、名および年齢という3つのフィールドが含まれています。Person
オブジェクトはSerializable
インタフェースを実装しています。オブジェクトをパーティション・キャッシュに格納する場合は、シリアライズが必要になります。
例34-1 単純なPersonオブジェクト
package com.examples; import java.io.Serializable; public class Person implements Serializable { private String m_sFirstName; private String m_sLastName; private int m_nAge; private static final long serialVersionUID = 99L; public Person(String sFirstName, String sLastName, int nAge) { m_sFirstName = sFirstName; m_sLastName = sLastName; m_nAge = nAge; } public String getFirstName() { return m_sFirstName; } public String getLastName() { return m_sLastName; } public int getAge() { return m_nAge; } public String toString() { return "Person( " +m_sFirstName + " " + m_sLastName + " : " + m_nAge + ")"; } }
タスク2: ローカル・キャッシュへのオブジェクトの格納
この項には次のトピックが含まれます:
サンプルJCacheアプリケーションの作成
次のアプリケーションは、1つのPerson
オブジェクトをローカル・キャッシュに格納します。このアプリケーションは、キャッシュ・プロバイダの取得方法、キャッシュ・マネージャの作成方法、キャッシュの構成方法および作成方法、キャッシュの使用方法を示しています。
例34-2 サンプルJCacheアプリケーション
package com.examples; import javax.cache.Cache; import javax.cache.CacheManager; import javax.cache.Caching; import javax.cache.configuration.MutableConfiguration; import javax.cache.spi.CachingProvider; public class JCacheExample { public static void main(String[] args) { CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); MutableConfiguration<String, Object> config = new MutableConfiguration<String, Object>(); config.setStoreByValue(true).setTypes(String.class, Object.class); Cache<String, Object> cache = cacheManager.createCache("MyCache", config); Person p = new Person("John","Doe",24); String key = "k"; Person value = p; cache.put(key, value); System.out.println("\n Cache: " + cache.getName() + " contains: " + cache.get(key) + "\n"); cacheManager.close(); } }
親トピック: タスク2: ローカル・キャッシュへのオブジェクトの格納
タスク3: サンプル・クラスタの構成
サンプル・クラスタを構成するには:
-
tangosol-coherence-override.xml
という名前のファイルを作成します。 -
次のオーバーライド構成を追加して、
cluster_name
をこのクラスタ内で一意の値に置き換えます。たとえば、クラスタ名に自分の名前を使用します。<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <member-identity> <cluster-name>cluster_name</cluster-name> </member-identity> </cluster-config> </coherence>
-
APPLICATION_HOME
\config
ディレクトリにファイルを保存します。
タスク4: パーティション・キャッシュへのオブジェクトの格納
このタスクでは、キャッシュ・サーバー・プロセスとJCacheExample
アプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。最後に、CoherenceのCacheFactory
によって、JCacheExample
アプリケーションがクラスタ上に正常にキャッシュを作成およびロードしたことが検証されます。
この項には次のトピックが含まれます:
サンプル・キャッシュ・サーバーの起動
コマンド・プロンプトから、Javaの-cp
オプションでAPPLICATION_HOME
\config
ディレクトリを含めてDefaultCacheServer
クラスを実行し、キャッシュ・サーバー・インスタンスを起動します。クラスパスには、cache-api.jar
、coherence-jcache.jar
およびcoherence.jar
ライブラリも含める必要があります。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルおよびcoherence-jcache.jar
がロードされることを確認します。最後に、coherence.cacheconfig
システム・プロパティを使用して、coherence-jcache.jar
の中にあるJCacheのcoherence-jcache-cache-config.xml
キャッシュ構成ファイルを明示的に使用します。たとえば:
java -Dcoherence.cacheconfig=coherence-jcache-cache-config.xml -cp APPLICATION_HOME\config;COHERENCE_HOME\lib\cache-api.jar; COHERENCE_HOME\lib\coherence-jcache.jar;COHERENCE_HOME\lib\coherence.jar com.tangosol.net.DefaultCacheServer
キャッシュ・サーバーの出力から、jcache-partitioned-service
というクラスタの上位メンバーである分散キャッシュ・サービスが作成されたことを確認してください。
(thread=DistributedCache:jcache-partitioned-service, member=1): Service jcache-partitioned-service joined the cluster with senior service member 1
アプリケーションの実行
coherence.jcache.configuration.classname
システム・プロパティによって、Coherence JCacheプロバイダがローカル・キャッシュのかわりにパーティション・キャッシュを使用するように構成されます。アプリケーション・コードにはいかなる変更も必要ないため、JCacheプロバイダ間の移植性が得られます。さらに、Coherenceはアプリケーション・スコープおよびキャッシュ構成も管理します。
Person
オブジェクトをパーティション・キャッシュに格納するには:
タスク5: パススルー・キャッシュへのオブジェクトの格納
このタスクでは、キャッシュ・サーバー・プロセスとJCacheExample
アプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。最後に、CoherenceのCacheFactory
によって、JCacheExample
アプリケーションがクラスタ上に正常にキャッシュを作成およびロードしたことが検証されます。
この項には次のトピックが含まれます:
サンプル・キャッシュの定義
この例では、明示的にMyCache
という名前にマップされる分散キャッシュを定義するキャッシュ構成が作成されます。
キャッシュのサンプルを定義するには:
親トピック: タスク5: パススルー・キャッシュへのオブジェクトの格納
サンプル・キャッシュ・サーバーの起動
コマンド・プロンプトから、Javaの-cp
オプションでAPPLICATION_HOME
\config
ディレクトリおよびcoherence.jar
ライブラリを含めてDefaultCacheServer
クラスを実行し、キャッシュ・サーバー・インスタンスを起動します。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルがロードされることを確認します。最後に、coherence.cacheconfig
システム・プロパティを使用して、example-config.xml
キャッシュ構成ファイルを明示的に定義します。たとえば:
java -Dcoherence.cacheconfig=example-config.xml -cp APPLICATION_HOME\config;COHERENCE_HOME\lib\coherence.jar com.tangosol.net.DefaultCacheServer
親トピック: タスク5: パススルー・キャッシュへのオブジェクトの格納
アプリケーションの実行
coherence.jcache.configuration.classname
システム・プロパティによって、Coherence JCacheプロバイダがパススルー・キャッシュを使用するように構成されます。アプリケーション・コードにはいかなる変更も必要ありません。
コマンド・プロンプトで、JCacheExample
クラスを実行し、coherence.jcache.configuration.classname
システム・プロパティをpassthrough
に、coherence.cacheconfig
システム・プロパティをexample-config
に、coherence.distributed.localstorage
システム・プロパティをfalse
に設定します。Javaの-cp
オプションで、APPLICATION_HOME
\config
ディレクトリを含めます。クラスパスには、cache-api.jar
、coherence-jcache.jar
およびcoherence.jar
ライブラリも含める必要があります。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルがロードされることを確認します。たとえば:
java -Dcoherence.jcache.configuration.classname=passthrough -Dcoherence.cacheconfig=example-config.xml -Dcoherence.distributed.localstorage=false -cp .;APPLICATION_HOME\config;COHERENCE_HOME\lib\cache-api.jar; COHERENCE_HOME\lib\coherence-jcache.jar;COHERENCE_HOME\lib\coherence.jar com.examples.JCacheExample
使用されるCoherence構成リソースを示すCoherenceのログ・メッセージが出力されます。tangosol-coherence-override.xml
ファイルおよびexample-config.xml
ファイルがロードされたことを確認してください。アプリケーション・プロセスはキャッシュ・サーバー・プロセスを含むクラスタに接続し、両方のプロセスがDistributedCache
サービスを実行します。これまでと同様に、アプリケーションはキャッシュ内のエントリを出力し、終了します。
親トピック: タスク5: パススルー・キャッシュへのオブジェクトの格納
キャッシュの確認
この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、アプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。
このステップでは、キャッシュ・ファクトリ・コマンド行ツールを使用して、MyCache
キャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。
キャッシュを確認するには:
親トピック: タスク5: パススルー・キャッシュへのオブジェクトの格納