この章では、Coherence JCacheの基本的なサンプルをビルドおよび実行する手順を示し、JCacheおよびCoherence JCacheプロバイダの両方の基本概念について説明します。サンプル・アプリケーションは、ドメイン・オブジェクト(Person
オブジェクト)をキャッシュに格納する単純なアプリケーションです。このサンプルでは、ローカル・キャッシュ、パーティション・キャッシュおよびパススルー・キャッシュの使用方法を示します。
初めてCoherenceを使用する場合は、「最初のCoherenceアプリケーションの作成」
を参照し、Coherence固有のNamedCacheサンプルを実行することも検討してください。
この章には次の項が含まれます:
この章のサンプルでは、単純な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 + ")"; } }
アプリケーションは、JCache APIを使用してキャッシュにアクセスし、キャッシュとの相互作用を図ります。APIは、キャッシュを作成および使用するメソッドを提供しています。キャッシュ・タイプが定義されていない場合にCoherenceが使用するデフォルトのキャッシュ・タイプは、ローカル・キャッシュ(アプリケーション・プロセスにローカル)です。
次のアプリケーションは、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(); } }
サンプルのスタンドアロン・アプリケーションを実行するには:
コマンド・プロンプトから、Person.java
およびJCacheExample.java
ファイルをコンパイルします。次の例およびこれ以降のタスクでは、ファイルがAPPLICATION_HOME
という単一のディレクトリにあることを前提とします。
cd APPLICATION_HOME javac -cp COHERENCE_HOME\lib\cache-api.jar com\examples\*
Javaの-cp
オプションを使用してクラスパスにcoherence.jar
、coherence-jcache.jar
およびcache-api.jar
ライブラリの場所を含め、JCacheExample
クラスを実行します。例:
java -cp .;COHERENCE_HOME\lib\cache-api.jar; COHERENCE_HOME\lib\coherence-jcache.jar;COHERENCE_HOME\lib\coherence.jar com.examples.JCacheExample
使用されるCoherence構成リソースおよび作成されるCoherenceキャッシュ・ファクトリを示すCoherenceのログ・メッセージが出力されます。アプリケーションはキャッシュ内のエントリを出力し、終了します。
パーティション・キャッシュおよびパススルー・キャッシュは、キャッシュ・データを分散させるためにCoherenceクラスタを使用します。このタスクでは、オペレーション・オーバーライド・ファイルを作成して初期状態のデフォルト・クラスタ構成を修正します。具体的には、デフォルト構成を修正してプライベート・クラスタを作成し、ネットワーク上で実行されている可能性のある既存のCoherenceクラスタにJVMプロセスが参加しないようにします。
サンプル・クラスタを構成するには:
tangosol-coherence-override.xml
という名前のファイルを作成します。
次のオーバーライド構成を追加して、cluster_name
およびport
をクラスタ内で一意の値に置き換えます。たとえば、クラスタ名に自分の名前を使用し、ポート番号に電話番号の最後の4桁を使用します。
<?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> <multicast-listener> <address>224.3.6.0</address> <port>port</port> <time-to-live>0</time-to-live> </multicast-listener> </cluster-config> </coherence>
APPLICATION_HOME
\config
ディレクトリにファイルを保存します。
パーティション・キャッシュは、キャッシュ・エントリをCoherenceクラスタ内の任意の数のキャッシュ・サーバーに分散させるキャッシュです。パーティション・キャッシュに格納されるエントリは、アプリケーション・プロセスの終了後にバックアップされ、クラスタ上に永続化されます。JCacheプロバイダとともにパーティション・キャッシュを使用する方法の詳細は、「パーティション・キャッシュの作成」を参照してください。
このタスクでは、キャッシュ・サーバー・プロセスと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
がロードされることを確認します。また、tangosol.coherence.cacheconfig
システム・プロパティで、明示的にcoherence-jcache.jar
の中にあるJCacheのcoherence-jcache-cache-config.xml
キャッシュ構成ファイルを指定します。例:
java -Dtangosol.coherence.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
tangosol.coherence.jcache.configuration.classname
システム・プロパティによって、Coherence JCacheプロバイダがローカル・キャッシュのかわりにパーティション・キャッシュを使用するように構成されます。アプリケーション・コードにはいかなる変更も必要ないため、JCacheプロバイダ間の移植性が得られます。さらに、Coherenceはアプリケーション・スコープおよびキャッシュ構成も管理します。
Person
オブジェクトをパーティション・キャッシュに格納するには:
コマンド・プロンプトで、tangosol.coherence.jcache.configuration.classnameシステム・プロパティをpartitioned
に、tangosol.coherence.distributed.localstorage
システム・プロパティをfalse
に設定して例34-2
で作成したアプリケーションを実行します。Javaの-cp
オプションで、APPLICATION_HOME
\config
ディレクトリを含めます。クラスパスには、cache-api.jar
、coherence-jcache.jar
およびcoherence.jar
ライブラリも含める必要があります。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルおよびcoherence-jcache.jar
ライブラリがロードされることを確認します。例:
java -Dtangosol.coherence.jcache.configuration.classname=partitioned -Dtangosol.coherence.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
ファイルがロードされたことを確認してください。最後に、アプリケーション・プロセスがクラスタに参加し、jcache-partitioned-service
インスタンスがキャッシュ・サーバー上の上位サービスに参加したことを確認してください。
(thread=DistributedCache:jcache-partitioned-service, member=2): Service jcache-partitioned-service joined the cluster with senior service member 1
この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、アプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。
この手順では、キャッシュ・ファクトリ・コマンド行ツールを使用して、キャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。
キャッシュを確認するには:
コマンド・プロンプトから、CacheFactory
クラスを使用してスタンドアロンのキャッシュ・ファクトリ・インスタンスを起動します。Javaの-cp
オプションで、APPLICATION_HOME
\config
ディレクトリを含めます。クラスパスには、Person
オブジェクト、cache-api.jar
、coherence-jcache.jar
およびcoherence.jar
ライブラリも含める必要があります。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルおよびcoherence-jcache.jar
がロードされることを確認します。最後に、tangosol.coherence.cacheconfig
システム・プロパティをcoherence-jcache-cache-config.xml
に、tangosol.coherence.distributed.localstorage
システム・プロパティをfalse
に設定します。例:
java -Dtangosol.coherence.cacheconfig=coherence-jcache-cache-config.xml -Dtangosol.coherence.distributed.localstorage=false -cp APPLICATION_HOME\config;APPLICATION_HOME\person.jar; COHERENCE_HOME\lib\cache-api.jar;COHERENCE_HOME\lib\coherence-jcache.jar; COHERENCE_HOME\lib\coherence.jar com.tangosol.net.CacheFactory
キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンド行ツールのコマンド・プロンプトを返します。
コマンド行ツールのコマンド・プロンプトで、cache
コマンドを使用してMyCache
キャッシュを取得します。
cache jcache-partitioned-coherence-jcache-cache-config.xml$MyCache
注意: この例では、キャッシュ名はアプリケーション・スコープを含んでいます。アプリケーションは、キャッシュを使用する際にアプリケーション・スコープを明示的に含む必要ありません。 |
コマンド行ツールのコマンド・プロンプトで、list
コマンドを使用してキャッシュの内容を取得します。
list
コマンドは次の文字列を返し、表示します。
k = Person( John Doe : 24)
すべてのプロセスをシャットダウンします。
パススルー・キャッシュは、既存のCoherenceキャッシュ(Coherenceキャッシュ構成ファイルで定義されるキャッシュ)に委任するキャッシュです。パススルー・キャッシュによってすべてのCoherenceネイティブの機能が使用できるようになり、キャッシュ構成の高度な制御が可能になります。
このタスクでは、キャッシュ・サーバー・プロセスとJCacheExample
アプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。最後に、CoherenceのCacheFactory
によって、JCacheExample
アプリケーションがクラスタ上に正常にキャッシュを作成およびロードしたことが検証されます。
この例では、明示的にMyCache
という名前にマップされる分散キャッシュを定義するキャッシュ構成が作成されます。
キャッシュのサンプルを定義するには:
XMLファイルexample-config.xml
を作成します。
次の分散キャッシュの定義をファイルにコピーします。
<?xml version="1.0"?> <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"> <caching-scheme-mapping> <cache-mapping> <cache-name>MyCache</cache-name> <scheme-name>distributed</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <distributed-scheme> <scheme-name>distributed</scheme-name> <service-name>DistributedCache</service-name> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme> </caching-schemes> </cache-config>
APPLICATION_HOME
\config
ディレクトリにファイルを保存します。
コマンド・プロンプトから、Javaの-cp
オプションでAPPLICATION_HOME
\config
ディレクトリおよびcoherence.jar
ライブラリを含めてDefaultCacheServer
クラスを実行し、キャッシュ・サーバー・インスタンスを起動します。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルがロードされることを確認します。最後に、tangosol.coherence.cacheconfig
システム・プロパティで、明示的にexample-config.xml
キャッシュ構成ファイルを定義します。例:
java -Dtangosol.coherence.cacheconfig=example-config.xml -cp APPLICATION_HOME\config;COHERENCE_HOME\lib\coherence.jar com.tangosol.net.DefaultCacheServer
tangosol.coherence.jcache.configuration.classname
システム・プロパティによって、Coherence JCacheプロバイダがパススルー・キャッシュを使用するように構成されます。アプリケーション・コードにはいかなる変更も必要ありません。
コマンド・プロンプトで、JCacheExample
クラスを実行し、tangosol.coherence.jcache.configuration.classname
システム・プロパティをpassthrough
に、tangosol.coherence.cacheconfig
システム・プロパティをexample-config
に、tangosol.coherence.distributed.localstorage
システム・プロパティをfalse
に設定します。Javaの-cp
オプションで、APPLICATION_HOME
\config
ディレクトリを含めます。クラスパスには、cache-api.jar
、coherence-jcache.jar
およびcoherence.jar
ライブラリも含める必要があります。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルがロードされることを確認します。例:
java -Dtangosol.coherence.jcache.configuration.classname=passthrough -Dtangosol.coherence.cacheconfig=example-config.xml -Dtangosol.coherence.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
サービスを実行します。これまでと同様に、アプリケーションはキャッシュ内のエントリを出力し、終了します。
この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、アプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。
この手順では、キャッシュ・ファクトリ・コマンド行ツールを使用して、MyCache
キャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。
キャッシュを確認するには:
コマンド・プロンプトから、CacheFactory
クラスを使用してスタンドアロンのキャッシュ・ファクトリ・インスタンスを起動します。Javaの-cp
オプションで、APPLICATION_HOME
\config
ディレクトリを含めます。クラスパスには、Person
オブジェクトおよびcoherence.jar
ライブラリも含める必要があります。クラスパス上で、coherence.jar
ライブラリよりも先にオペレーション・オーバーライド・ファイルがロードされることを確認します。また、tangosol.coherence.cacheconfig
システム・プロパティをexample-config.xml
に、tangosol.coherence.distributed.localstorage
システム・プロパティをfalse
に設定します。例:
java -Dtangosol.coherence.cacheconfig=example-config.xml -Dtangosol.coherence.distributed.localstorage=false -cp APPLICATION_HOME\config;APPLICATION_HOME\person.jar; COHERENCE_HOME\lib\coherence.jar com.tangosol.net.CacheFactory
キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンド行ツールのコマンド・プロンプトを返します。
コマンド行ツールのコマンド・プロンプトで、cache
コマンドを使用してMyCache
キャッシュを取得します。
cache MyCache
コマンド行ツールのコマンド・プロンプトで、list
コマンドを使用してキャッシュの内容を取得します。
list
コマンドは次の文字列を返し、表示します。
k = Person( John Doe : 24)