Personオブジェクト)をキャッシュに格納する単純なアプリケーションです。このサンプルでは、ローカル・キャッシュ、パーティション・キャッシュおよびパススルー・キャッシュの使用方法を示します。
Coherenceが初めての場合は、Coherence固有のNamedCacheの例の実行も検討してください。最初のCoherenceアプリケーションの作成を参照してください。
この章の内容は次のとおりです。
親トピック: Coherence JCache実装の使用
この章のサンプルでは、単純な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();
}
}
パーティション・キャッシュおよびパススルー・キャッシュは、キャッシュ・データを分散させるためにCoherenceクラスタを使用します。このタスクでは、オペレーション・オーバーライド・ファイルを作成して初期状態のデフォルト・クラスタ構成を修正します。具体的には、デフォルト構成を修正してプライベート・クラスタを作成し、ネットワーク上で実行されている可能性のある既存のCoherenceクラスタにJVMプロセスが参加しないようにします。
サンプル・クラスタを構成するには:
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ディレクトリにファイルを保存します。
パーティション・キャッシュは、キャッシュ・エントリをCoherenceクラスタ内の任意の数のキャッシュ・サーバーに分散させるキャッシュです。パーティション・キャッシュに格納されるエントリは、アプリケーション・プロセスの終了後にバックアップされ、クラスタ上に永続化されます。パーティション・キャッシュの作成を参照してください。
このタスクでは、キャッシュ・サーバー・プロセスと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オブジェクトをパーティション・キャッシュに格納するには:
パススルー・キャッシュは、既存のCoherenceキャッシュ(Coherenceキャッシュ構成ファイルで定義されるキャッシュ)に委任するキャッシュです。パススルー・キャッシュによってすべてのCoherenceネイティブの機能が使用できるようになり、キャッシュ構成の高度な制御が可能になります。
このタスクでは、キャッシュ・サーバー・プロセスとJCacheExampleアプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。最後に、CoherenceのCacheFactoryによって、JCacheExampleアプリケーションがクラスタ上に正常にキャッシュを作成およびロードしたことが検証されます。
この項には次のトピックが含まれます:
コマンド・プロンプトから、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
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サービスを実行します。これまでと同様に、アプリケーションはキャッシュ内のエントリを出力し、終了します。