ヘッダーをスキップ
Oracle® Coherenceチュートリアル
リリース3.6
B61373-01
  ドキュメント・ライブラリへ
ライブラリ
製品リストへ
製品
目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 Javaからデータ・グリッドへのアクセス

この演習では、Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うための、単純なJavaコンソールベースのアプリケーションを開発します。また、Coherence Java APIの使用についても学習します。JDeveloperを使用して、次のタスクを実行します。

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

3.1 概要

Coherenceのキャッシュはすべて名前が付けられており、所属するクラスタ・インスタンスによって存続期間が調べられ、com.tangosol.net.NamedCacheインタフェースを実装します。NamedCacheインタフェースはjava.util.Mapを拡張したもので、クラスタ・メンバー間で共有されているデータおよびリソースが保持されます。NamedCacheにはそれぞれ、データがキーと値のペアとして保持されます。キーと値のオブジェクト・タイプは、単一でも複合でもかまいません。NamedCacheインタフェースは、ロックおよび同期、記憶域統合、問合せ、イベント集計、トランザクションなどの拡張機能をMapインタフェースに提供します。表3-1で、NamedCacheインタフェース内でよく使用されるメソッドをいくつか説明します。

表3-1 NamedCacheインタフェースのメソッド

メソッド名 説明

void clear()

NamedCacheからすべてのエントリを削除します。

boolean containsKey(Object key)

NamedCacheにキーのエントリが格納されている場合にtrueを返します。

boolean containsValue(Objectvalue)

NamedCacheにこの値を含むエントリが1つ以上格納されている場合にtrueを返します。

Object get(Object key)

このキーのエントリをNamedCacheから取得します。

Object put(Object key,Objectvalue)

オブジェクトをキャッシュに挿入して、前の値がある場合はこれを返します。

Object remove(Object key)

このkeyのマッピングをこのマップから削除します(存在する場合)。ConcurrentMapからの継承です。

Set entrySet()

一連のキーと値のペアを返します。

Collection values()

すべての値をコレクションとして再取得します。

CacheService getCacheService()

このNamedCacheが所属するCacheServiceを返します。


com.tangosol.net.CacheFactoryクラスは通常、NamedCacheのインスタンスを取得するために使用します。表3-2で、CacheFactoryクラス内でよく使用されるメソッドをいくつか説明します。

表3-2 CacheFactoryクラスのメソッド

メソッド名 説明

static Cluster ensureCluster()

Coherenceのサービスを実行しているクラスタ・オブジェクトを取得します。

static void shutdown()

すべてのクラスタ・サービスをシャットダウンします。

static NamedCache getCache(String cache)

キャッシュのインスタンスを返します。クラスタ内の既存のキャッシュに参加するか、これが最初のメンバーである場合はキャッシュを作成します。


NamedCacheインタフェースおよびCacheFactoryクラスのメソッドの詳細な一覧は、C:\oracle\product\coherence\docにあるJavadocを参照してください。

3.2 最初のCoherenceベースのJavaプログラムの作成

この項では、Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うJavaプログラムの作成方法について説明します。

  1. キャッシュに値を入れるプログラムの作成

  2. キャッシュから値を取得するプログラムの作成

3.2.1 キャッシュに値を入れるプログラムの作成

次の手順に従い、CoherenceのJavaベース・アプリケーションを作成します。

  1. JDeveloperで新規プロジェクトを作成します。プロジェクトにInsertValueという名前を付けます。ディレクトリがC:\home\oracle\labs\InsertValueになっていることを確認します。

    詳細な手順は、「既存アプリケーションでの新規プロジェクトの作成」を参照してください。

  2. Coherenceエントリについて、「プロジェクト・プロパティ」の下の「ライブラリとクラスパス」の値をチェックします。coherence.jarのフルパスC:\oracle\product\coherence\lib\coherence.jarが指定されていることを確認します。

  3. 最初のCoherence Javaプログラムを作成します。クラスにMyFirstSampleという名前を付け、「mainメソッド」チェック・ボックスを選択します。

    詳細は、「Javaクラスの作成」を参照してください。

  4. JDeveloperエディタで、NamedCacheを作成するコードを記述して値を挿入してから、挿入した値を検証します。コード作成の終了後にファイルを保存します。例3-1にサンプル・プログラムを示します。

    例3-1 NamedCacheの作成、値の挿入および検証

    package com.oracle.handson;
    
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    
    public class MyFirstSample {
        public MyFirstSample() {
        }
    
        public static void main(String[] args) {
            
           // create or get a named cache called mycache 
           NamedCache myCache = CacheFactory.getCache("mycache");
           
           // put key, value pair into the cache. 
           myCache.put("Name","Gene Smith");
            
           System.out.println("Value in cache is " + myCache.get("Name"));
            
        }
    }
    
  5. 稼働しているキャッシュ・サーバーがあれば停止します。

  6. このプログラムをJDeveloperで実行します。エディタでMyFirstSample.javaクラスを右クリックして「実行」を選択します。

  7. 次のようなメッセージが表示されます。

    図3-1 NamedCacheを作成して値を格納および取得した場合の出力

    NameCacheの作成と値の格納および取得

3.2.2 キャッシュから値を取得するプログラムの作成

次の手順に従い、挿入してから取得するのではなく、単純にキャッシュから値を取得するJavaクラスを作成します。

  1. MyFirstSampleReaderという名前の別のJavaクラスを作成します。詳細は、「Javaクラスの作成」を参照してください。例3-2にサンプル・プログラムを示します。

    例3-2 キャッシュからの値の取得

    package com.oracle.handson;
    
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    
    public class MyFirstSampleReader {
        
        public MyFirstSampleReader() {
        }
    
        public static void main(String[] args) {
            // ensure we are in a cluser
            CacheFactory.ensureCluster();
             
            // create or get a named cache called mycache 
            NamedCache myCache = CacheFactory.getCache("mycache");
                    
            System.out.println("Value in cache is " + myCache.get("Name"));
        }
    }
    
  2. MyFirstSampleReaderクラスを実行します。図3-2にプログラムの出力を示します。NULL値が返されることに注目してください。MyFirstSampleにより、NamedCacheは正常に作成され、移入が行われますが、このキャッシュが存在するのはMyFirstSampleプロセス・メモリー内のみです。MyFirstSampleが終了すれば、キャッシュも削除されます。

    図3-2 SampleReaderプログラムの出力

    SampleReaderプログラムの出力
  3. Coherenceインストールのテスト」で使用したcache-server.cmdを起動し、MyFirstSampleを実行してNamedCacheに値を挿入してから、MyFirstSampleReaderを実行してキャッシュから値を読み取ります。図3-3に示す出力では、MyFirstSampleによって格納されたGene Smithの値が、MyFirstSampleReaderによって返されています。

    図3-3 キャッシュ・サーバーを実行している状態でのSampleReaderプログラムの出力

    キャッシュ・サーバーを実行している状態でのSampleReaderプログラムの出力

    これは、MyFirstSampleのように、値を挿入してから離脱するなど、1つの操作を実行するためにのみクラスタに参加するプロセスには該当しません。デフォルトでは、すべてのプロセスは記憶域が有効な状態で起動します。プロセスではクラスタの一部としてデータを格納できます。このようなプロセスは、記憶域が無効になるように変更する必要があります。次のJavaコマンドライン・パラメータを使用します。

    -Dtangosol.coherence.distributed.localstorage=false
    

    Javaオプション-Dtangosol.coherence.distributed.localstorageは、プロセスで記憶域を有効にするかどうかを指定します。このパラメータをfalseに設定すると、プロセスで記憶域が無効であることが指定されます。

    1. ローカル記憶域を無効にするようプロジェクト・プロパティを変更します。詳細は、「プロジェクト・プロパティの変更によるランタイム構成の設定」を参照してください。

    2. Javaオプション」フィールドに次の値を入力します。

      -Dtangosol.coherence.distributed.localstorage=false -Dtangosol.coherence.log.level=3
      

      Javaプロパティtangosol.coherence.log.level=levelは、Coherenceによって生成されるロギングのレベルを変更します。levelには0〜9の数値を設定できます。デフォルトは5です。0を指定するとロギングは行われません。9を指定すると非常に詳細になります。ほとんどのアプリケーション開発では、多くの場合、この値は3で十分です。

  4. 実行中のキャッシュ・サーバーをすべてシャットダウンして、MyFirstSampleクラスを再実行します。

    図3-4のように、クラスタで記憶域が有効でないことを示すメッセージが表示されます。これは、このメンバーを記憶域無効に設定しているためです。

    図3-4 記憶域が無効な場合のJDeveloperの出力

    記憶域が無効な場合のJDeveloperの出力
  5. キャッシュ・サーバーを再起動し、MyFirstSampleおよびMyFirstSampleReaderを再度実行します。1回目と2回目のJavaのサンプル実行の間にデータが残っていることが確認できます。

3.3 最初のCoherenceベースのJavaアプリケーションの作成

この演習では、Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うための、単純なJavaコンソールベースのアプリケーションを開発します。

この演習では、「Coherenceインストールのテスト」を完了していると想定しています。キャッシュ・サーバーとキャッシュ・クライアントが稼働中であることを確認します。

通常クライアント・アプリケーションとサーバー・アプリケーションの間で接続および切断が行われるクライアント/サーバー・アプリケーションとは異なり、Coherenceベースのクラスタ・アプリケーションは、クラスタ内に存在することを確認するのみで、確認後もクラスタのサービスを使用できます。Coherenceベースのアプリケーションは通常、アプリケーションのクラスタに接続するのではなく、クラスタの一部になります。

  1. コンソール・アプリケーションの作成

  2. コンソール・アプリケーションの実行

3.3.1 コンソール・アプリケーションの作成

Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うJavaコンソールベースのアプリケーションを作成する手順は次のとおりです。

  1. C:\oracle\product\coherence\docディレクトリにあるCoherence Javaドキュメント(Javadoc)で、CacheFactoryクラスのメソッドを調べます。

  2. CacheFactoryクラスを使用してクラスタに参加(ensureClusterメソッドを使用)し、その後クラスタから離脱(shutdownメソッドを使用)する、YourFirstCoherenceApplicationという単純なJavaコンソール・アプリケーション(Javaクラス)を開発します。Javaクラスの作成の詳細は、「Javaクラスの作成」を参照してください。

  3. Javadocを使用して、NamedCacheインタフェースで使用できるメソッドを調べます。

  4. アプリケーションを拡張し、CacheFactoryメソッドgetCacheを使用して、mycacheというキャッシュ(「Coherenceインストールのテスト」の演習で使用したものと同じキャッシュ名)用のNamedCacheを取得するようにします。

  5. NamedCacheインスタンスで、getメソッドを使用して、messageキー(「Coherenceインストールのテスト」の演習で使用したものと同じキー)の値を取得します。

  6. System.out.println(….)メソッドを使用して、値を標準出力に出力します。

    例3-3に、CoherenceベースのJavaアプリケーションのサンプルを示します。

    例3-3 CoherenceベースのJavaアプリケーションのサンプル

    package com.oracle.handson;
    
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    
    public class YourFirstCoherenceApplication {
    public YourFirstCoherenceApplication() {
    }
    
       public static void main(String[] args) {
    
          CacheFactory.ensureCluster();
    
          NamedCache myCache = CacheFactory.getCache("mycache");
    
          String message = (String)myCache.get("message");
    
          System.out.println(message);
    
          CacheFactory.shutdown();
    YourFirstCoherenceApplication yourfirstcoherenceapplication = new YourFirstCoherenceApplication(); 
       }
    
    }
    

3.3.2 コンソール・アプリケーションの実行

次の手順に従い、Coherenceアプリケーションを実行します。

  1. Coherenceキャッシュ・サーバーとキャッシュ・クライアントが稼働中であることを確認します。キャッシュ・クライアントで、mycacheキャッシュに接続します。次に例を示します。

    Map(?): cache mycache
    
  2. JDeveloperのIDEからYourFirstCoherenceApplicationを実行して、結果を表示します。

    図3-5YourFirstCoherenceApplicationの出力を示します。この出力は、messageキーのデータがキャッシュに格納されていないことを示しています。

    図3-5 CoherenceベースのJavaアプリケーションの出力: キーの値なし

    CoherenceベースのJavaアプリケーションの出力: キャッシュ内にデータなし
  3. 実行中のキャッシュ・クライアントを使用して、messageキーを変更します。たとえば、次のように入力します。

    Map <mycache>: put message "hello"
    

    JDeveloperのIDEからYourFirstCoherenceApplicationを再実行して、変更された値を確認します。図3-6に、キャッシュ内にmessageキーの値としてhelloが保持されていることを示します。

    図3-6 CoherenceベースのJavaアプリケーションの出力: キーのデータ値あり

    CoherenceベースのJavaアプリケーションの出力: キャッシュ内にデータ値あり
  4. 次のJVMパラメータを指定して、YourFirstCoherenceApplicationを再実行します。出力は前回の実行と同じです。

    -Dtangosol.coherence.distributed.localstorage=false
    
  5. キャッシュ・サーバーおよびキャッシュ・クライアントのインスタンスをシャットダウンします。キャッシュ・サーバーを再起動してから、(前述のJVMパラメータを設定して)YourFirstCoherenceApplicationを再実行します。今回は出力がnullになります。

  6. アプリケーションで(putメソッドを使用して)messageキーの値を変更した場合、新しい値はキャッシュ・クライアントで使用できますか。

    1. たとえば、getメソッドをコメント・アウトしてputメソッドを追加します。

      //String message = (String)myCache.get("message");
        String message = (String)myCache.put("message", "bye");
      
    2. YourFirstCoherenceApplicationを実行します。

    3. キャッシュ・クライアントでgetコマンドを実行します。

      Map (mycache): get message
      

      出力としてbyeが表示されます。