34 最初のCoherence JCacheアプリケーションの作成

ステップを追って基本的なCoherence JCacheの例の構築と実行を説明し、JCacheおよびCoherence JCacheプロバイダの両方の基本的な概念を示します。サンプル・アプリケーションは、ドメイン・オブジェクト(Personオブジェクト)をキャッシュに格納する単純なアプリケーションです。このサンプルでは、ローカル・キャッシュ、パーティション・キャッシュおよびパススルー・キャッシュの使用方法を示します。

Coherenceが初めての場合は、Coherence固有のNamedCacheの例の実行も検討してください。最初のCoherenceアプリケーションの作成を参照してください。

この章の内容は次のとおりです。

タスク1: 単純なオブジェクトの作成

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 + ")";
   } 
}

タスク2: ローカル・キャッシュへのオブジェクトの格納

アプリケーションは、JCache APIを使用してキャッシュにアクセスし、キャッシュとの相互作用を図ります。APIにはキャッシュを作成および使用する手法が用意されています。キャッシュ・タイプが定義されていない場合にCoherenceが使用するデフォルトのキャッシュ・タイプは、ローカル・キャッシュ(アプリケーション・プロセスにローカル)です。

この項には次のトピックが含まれます:

サンプル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();
   }
}

サンプルJCacheアプリケーションの実行

サンプルのスタンドアロン・アプリケーションを実行するには:

  1. コマンド・プロンプトから、Person.javaおよびJCacheExample.javaファイルをコンパイルします。次の例およびこれ以降のタスクでは、ファイルがAPPLICATION_HOMEという単一のディレクトリにあることを前提とします。
    cd APPLICATION_HOME
    javac -cp COHERENCE_HOME\lib\cache-api.jar com\examples\*
    
  2. Javaの-cpオプションを使用してクラスパスにcoherence.jarcoherence-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のログ・メッセージが出力されます。アプリケーションはキャッシュ内のエントリを出力し、終了します。

タスク3: サンプル・クラスタの構成

パーティション・キャッシュおよびパススルー・キャッシュは、キャッシュ・データを分散させるためにCoherenceクラスタを使用します。このタスクでは、即時利用可能なデフォルトのクラスタ構成を変更するオペレーション・オーバーライド・ファイルを作成します。具体的には、デフォルト構成を修正してプライベート・クラスタを作成し、ネットワーク上で実行されている可能性のある既存のCoherenceクラスタにJVMプロセスが参加しないようにします。

サンプル・クラスタを構成するには:

  1. tangosol-coherence-override.xmlという名前のファイルを作成します。

  2. 次のオーバーライド構成を追加して、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>
    
  3. APPLICATION_HOME\configディレクトリにファイルを保存します。

タスク4: パーティション・キャッシュへのオブジェクトの格納

パーティション・キャッシュは、キャッシュ・エントリをCoherenceクラスタ内の任意の数のキャッシュ・サーバーに分散させるキャッシュです。パーティション・キャッシュに格納されるエントリは、アプリケーション・プロセスの終了後にバックアップされ、クラスタ上に永続化されます。パーティション・キャッシュの作成を参照してください。

このタスクでは、キャッシュ・サーバー・プロセスとJCacheExampleアプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。最後に、CoherenceのCacheFactoryによって、JCacheExampleアプリケーションがクラスタ上に正常にキャッシュを作成およびロードしたことが検証されます。

この項には次のトピックが含まれます:

サンプル・キャッシュ・サーバーの起動

コマンド・プロンプトから、Javaの-cpオプションでAPPLICATION_HOME\configディレクトリを含めてDefaultCacheServerクラスを実行し、キャッシュ・サーバー・インスタンスを起動します。クラスパスには、cache-api.jarcoherence-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オブジェクトをパーティション・キャッシュに格納するには:

  1. コマンド・プロンプトで、coherence.jcache.configuration.classnameシステム・プロパティをpartitionedに、coherence.distributed.localstorageシステム・プロパティをfalseに設定して、例34-2で作成したアプリケーションを実行します。Javaの-cpオプションで、APPLICATION_HOME\configディレクトリを含めます。クラスパスには、cache-api.jarcoherence-jcache.jarおよびcoherence.jarライブラリも含める必要があります。クラスパス上で、coherence.jarライブラリよりも先にオペレーション・オーバーライド・ファイルおよびcoherence-jcache.jarライブラリがロードされることを確認します。たとえば:
    java -Dcoherence.jcache.configuration.classname=partitioned 
    -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ファイルがロードされたことを確認してください。最後に、アプリケーション・プロセスがクラスタに参加し、jcache-partitioned-serviceインスタンスがキャッシュ・サーバー上の上位サービスに参加したことを確認してください。

    (thread=DistributedCache:jcache-partitioned-service, member=2): Service
    jcache-partitioned-service joined the cluster with senior service member 1
    

キャッシュの確認

この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、アプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。

このステップでは、キャッシュ・ファクトリ・コマンド行ツールを使用して、キャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。

キャッシュを確認するには:

  1. コマンド・プロンプトから、CacheFactoryクラスを使用してスタンドアロンのキャッシュ・ファクトリ・インスタンスを起動します。Javaの-cpオプションで、APPLICATION_HOME\configディレクトリを含めます。クラスパスには、Personオブジェクト、cache-api.jarcoherence-jcache.jarおよびcoherence.jarライブラリも含める必要があります。クラスパス上で、coherence.jarライブラリよりも先にオペレーション・オーバーライド・ファイルおよびcoherence-jcache.jarがロードされることを確認します。最後に、coherence.cacheconfigシステム・プロパティをcoherence-jcache-cache-config.xmlに、coherence.distributed.localstorageシステム・プロパティをfalseに設定します。たとえば:
    java -Dcoherence.cacheconfig=coherence-jcache-cache-config.xml 
    -Dcoherence.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
    

    キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンド行ツールのコマンド・プロンプトを返します。

  2. コマンド行ツールのコマンド・プロンプトで、cacheコマンドを使用してMyCacheキャッシュを取得します。
    cache jcache-partitioned-coherence-jcache-cache-config.xml$MyCache
    

    ノート:

    この例では、キャッシュ名はアプリケーション・スコープを含んでいます。アプリケーションは、キャッシュを使用する際にアプリケーション・スコープを明示的に含む必要ありません。

  3. コマンド行ツールのコマンド・プロンプトで、listコマンドを使用してキャッシュの内容を取得します。
    list
    

    コマンドは次の文字列を返し、表示します。

    k = Person( John Doe : 24)
    
  4. すべてのプロセスをシャットダウンします。

タスク5: パススルー・キャッシュへのオブジェクトの格納

パススルー・キャッシュは、既存のCoherenceキャッシュ(Coherenceキャッシュ構成ファイルで定義されるキャッシュ)に委任するキャッシュです。パススルー・キャッシュでは、Coherenceのネイティブ機能をすべて使用でき、キャッシュ構成をより細かく制御できます。

このタスクでは、キャッシュ・サーバー・プロセスとJCacheExampleアプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。最後に、CoherenceのCacheFactoryによって、JCacheExampleアプリケーションがクラスタ上に正常にキャッシュを作成およびロードしたことが検証されます。

この項には次のトピックが含まれます:

サンプル・キャッシュの定義

この例では、明示的にMyCacheという名前にマップされる分散キャッシュを定義するキャッシュ構成が作成されます。

キャッシュのサンプルを定義するには:

  1. example-config.xmlという名前のXMLファイルを作成します。
  2. 次の分散キャッシュの定義をファイルにコピーします。
    <?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>
    
  3. APPLICATION_HOME\configディレクトリにファイルを保存します。

サンプル・キャッシュ・サーバーの起動

コマンド・プロンプトから、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.jarcoherence-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サービスを実行します。これまでと同様に、アプリケーションはキャッシュ内のエントリを出力し、終了します。

キャッシュの確認

この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、アプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。

このステップでは、キャッシュ・ファクトリ・コマンド行ツールを使用して、MyCacheキャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。

キャッシュを確認するには:

  1. コマンド・プロンプトから、CacheFactoryクラスを使用してスタンドアロンのキャッシュ・ファクトリ・インスタンスを起動します。Javaの-cpオプションで、APPLICATION_HOME\configディレクトリを含めます。クラスパスには、Personオブジェクトおよびcoherence.jarライブラリも含める必要があります。クラスパス上で、coherence.jarライブラリよりも先にオペレーション・オーバーライド・ファイルがロードされることを確認します。最後に、coherence.cacheconfigシステム・プロパティをexample-config.xmlに、coherence.distributed.localstorageシステム・プロパティをfalseに設定します。たとえば:
    java -Dcoherence.cacheconfig=example-config.xml 
    -Dcoherence.distributed.localstorage=false 
    -cp APPLICATION_HOME\config;APPLICATION_HOME\person.jar;
    COHERENCE_HOME\lib\coherence.jar com.tangosol.net.CacheFactory
    

    キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンド行ツールのコマンド・プロンプトを返します。

  2. コマンド行ツールのコマンド・プロンプトで、cacheコマンドを使用してMyCacheキャッシュを取得します。
    cache MyCache
    
  3. コマンド行ツールのコマンド・プロンプトで、listコマンドを使用してキャッシュの内容を取得します。
    list
    

    コマンドは次の文字列を返し、表示します。

    k = Person( John Doe : 24)