プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceでのアプリケーションの開発
12c (12.2.1)
E69903-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

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

初めてCoherenceを使用する場合は、「最初のCoherenceアプリケーションの作成」を参照し、Coherence固有のNamedCacheサンプルを実行することも検討してください。

この章には次の項が含まれます:

34.1 タスク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 + ")";
   } 
}

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

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

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

34.2.2 サンプル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のログ・メッセージが出力されます。アプリケーションはキャッシュ内のエントリを出力し、終了します。

34.3 タスク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ディレクトリにファイルを保存します。

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

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

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

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

コマンド・プロンプトから、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

34.4.2 アプリケーションの実行

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
    

34.4.3 キャッシュの確認

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

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

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

  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. すべてのプロセスをシャットダウンします。

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

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

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

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

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

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

  1. XMLファイルexample-config.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ディレクトリにファイルを保存します。

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

コマンド・プロンプトから、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

34.5.3 アプリケーションの実行

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

34.5.4 キャッシュの確認

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

この手順では、キャッシュ・ファクトリ・コマンド行ツールを使用して、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)