この演習では、Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うための、単純なJavaコンソールベースのアプリケーションを開発します。また、Coherence Java APIの使用についても学習します。JDeveloperを使用して、次のタスクを実行します。
新規プロジェクトの作成
新規NamedCache
の作成
キャッシュに情報を格納して取得
キャッシュに関する情報の取得
この章の内容は次のとおりです。
Coherenceのキャッシュはすべて名前が付けられており、所属するクラスタ・インスタンスによって存続期間が調べられ、com.tangosol.net.NamedCache
インタフェースを実装します。NamedCache
インタフェースはjava.util.Map
を拡張したもので、クラスタ・メンバー間で共有されているデータおよびリソースが保持されます。NamedCache
にはそれぞれ、データがキーと値のペアとして保持されます。キーと値のオブジェクト・タイプは、単一でも複合でもかまいません。NamedCache
インタフェースは、ロックおよび同期、記憶域統合、問合せ、イベント集計、トランザクションなどの拡張機能をMap
インタフェースに提供します。表3-1で、NamedCache
インタフェース内でよく使用されるメソッドをいくつか説明します。
表3-1 NamedCacheインタフェースのメソッド
メソッド名 | 説明 |
---|---|
|
|
|
|
|
|
|
このキーのエントリを |
|
オブジェクトをキャッシュに挿入して、前の値がある場合はこれを返します。 |
|
この |
|
一連のキーと値のペアを返します。 |
|
すべての値をコレクションとして再取得します。 |
|
この |
com.tangosol.net.CacheFactory
クラスは通常、NamedCache
のインスタンスを取得するために使用します。表3-2で、CacheFactory
クラス内でよく使用されるメソッドをいくつか説明します。
表3-2 CacheFactoryクラスのメソッド
メソッド名 | 説明 |
---|---|
|
Coherenceのサービスを実行しているクラスタ・オブジェクトを取得します。 |
|
すべてのクラスタ・サービスをシャットダウンします。 |
|
キャッシュのインスタンスを返します。クラスタ内の既存のキャッシュに参加するか、これが最初のメンバーである場合はキャッシュを作成します。 |
NamedCache
インタフェースおよびCacheFactory
クラスのメソッドの詳細な一覧は、C:\oracle\product\coherence\doc
にあるJavadocを参照してください。
この項では、Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うJavaプログラムの作成方法について説明します。
次の手順に従い、CoherenceのJavaベース・アプリケーションを作成します。
JDeveloperで新規プロジェクトを作成します。プロジェクトにInsertValue
という名前を付けます。ディレクトリがC:\home\oracle\labs\InsertValue
になっていることを確認します。
詳細な手順は、「既存アプリケーションでの新規プロジェクトの作成」を参照してください。
Coherenceエントリについて、「プロジェクト・プロパティ」の下の「ライブラリとクラスパス」の値をチェックします。coherence.jar
のフルパスC:\oracle\product\coherence\lib\coherence.jar
が指定されていることを確認します。
最初のCoherence Javaプログラムを作成します。クラスにMyFirstSample
という名前を付け、「mainメソッド」チェック・ボックスを選択します。
詳細は、「Javaクラスの作成」を参照してください。
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")); } }
稼働しているキャッシュ・サーバーがあれば停止します。
このプログラムをJDeveloperで実行します。エディタでMyFirstSample.java
クラスを右クリックして「実行」を選択します。
次のようなメッセージが表示されます。
次の手順に従い、挿入してから取得するのではなく、単純にキャッシュから値を取得するJavaクラスを作成します。
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")); } }
MyFirstSampleReader
クラスを実行します。図3-2にプログラムの出力を示します。NULL値が返されることに注目してください。MyFirstSample
により、NamedCache
は正常に作成され、移入が行われますが、このキャッシュが存在するのはMyFirstSample
プロセス・メモリー内のみです。MyFirstSample
が終了すれば、キャッシュも削除されます。
「Coherenceインストールのテスト」で使用したcache-server.cmd
を起動し、MyFirstSample
を実行してNamedCache
に値を挿入してから、MyFirstSampleReader
を実行してキャッシュから値を読み取ります。図3-3に示す出力では、MyFirstSample
によって格納されたGene Smith
の値が、MyFirstSampleReader
によって返されています。
これは、MyFirstSample
のように、値を挿入してから離脱するなど、1つの操作を実行するためにのみクラスタに参加するプロセスには該当しません。デフォルトでは、すべてのプロセスは記憶域が有効な状態で起動します。プロセスではクラスタの一部としてデータを格納できます。このようなプロセスは、記憶域が無効になるように変更する必要があります。次のJavaコマンドライン・パラメータを使用します。
-Dtangosol.coherence.distributed.localstorage=false
Javaオプション-Dtangosol.coherence.distributed.localstorage
は、プロセスで記憶域を有効にするかどうかを指定します。このパラメータをfalse
に設定すると、プロセスで記憶域が無効であることが指定されます。
ローカル記憶域を無効にするようプロジェクト・プロパティを変更します。詳細は、「プロジェクト・プロパティの変更によるランタイム構成の設定」を参照してください。
「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で十分です。
実行中のキャッシュ・サーバーをすべてシャットダウンして、MyFirstSample
クラスを再実行します。
図3-4のように、クラスタで記憶域が有効でないことを示すメッセージが表示されます。これは、このメンバーを記憶域無効に設定しているためです。
キャッシュ・サーバーを再起動し、MyFirstSample
およびMyFirstSampleReader
を再度実行します。1回目と2回目のJavaのサンプル実行の間にデータが残っていることが確認できます。
この演習では、Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うための、単純なJavaコンソールベースのアプリケーションを開発します。
この演習では、「Coherenceインストールのテスト」を完了していると想定しています。キャッシュ・サーバーとキャッシュ・クライアントが稼働中であることを確認します。
通常クライアント・アプリケーションとサーバー・アプリケーションの間で接続および切断が行われるクライアント/サーバー・アプリケーションとは異なり、Coherenceベースのクラスタ・アプリケーションは、クラスタ内に存在することを確認するのみで、確認後もクラスタのサービスを使用できます。Coherenceベースのアプリケーションは通常、アプリケーションのクラスタに接続するのではなく、クラスタの一部になります。
Coherenceクラスタ・キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うJavaコンソールベースのアプリケーションを作成する手順は次のとおりです。
C:\oracle\product\coherence\doc
ディレクトリにあるCoherence Javaドキュメント(Javadoc)で、CacheFactory
クラスのメソッドを調べます。
CacheFactory
クラスを使用してクラスタに参加(ensureCluster
メソッドを使用)し、その後クラスタから離脱(shutdown
メソッドを使用)する、YourFirstCoherenceApplication
という単純なJavaコンソール・アプリケーション(Javaクラス)を開発します。Javaクラスの作成の詳細は、「Javaクラスの作成」を参照してください。
Javadocを使用して、NamedCache
インタフェースで使用できるメソッドを調べます。
アプリケーションを拡張し、CacheFactory
メソッドgetCache
を使用して、mycache
というキャッシュ(「Coherenceインストールのテスト」の演習で使用したものと同じキャッシュ名)用のNamedCache
を取得するようにします。
NamedCache
インスタンスで、get
メソッドを使用して、message
キー(「Coherenceインストールのテスト」の演習で使用したものと同じキー)の値を取得します。
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(); } }
次の手順に従い、Coherenceアプリケーションを実行します。
Coherenceキャッシュ・サーバーとキャッシュ・クライアントが稼働中であることを確認します。キャッシュ・クライアントで、mycache
キャッシュに接続します。次に例を示します。
Map(?): cache mycache
JDeveloperのIDEからYourFirstCoherenceApplication
を実行して、結果を表示します。
図3-5にYourFirstCoherenceApplication
の出力を示します。この出力は、message
キーのデータがキャッシュに格納されていないことを示しています。
実行中のキャッシュ・クライアントを使用して、message
キーを変更します。たとえば、次のように入力します。
Map <mycache>: put message "hello"
JDeveloperのIDEからYourFirstCoherenceApplication
を再実行して、変更された値を確認します。図3-6に、キャッシュ内にmessage
キーの値としてhello
が保持されていることを示します。
次のJVMパラメータを指定して、YourFirstCoherenceApplication
を再実行します。出力は前回の実行と同じです。
-Dtangosol.coherence.distributed.localstorage=false
キャッシュ・サーバーおよびキャッシュ・クライアントのインスタンスをシャットダウンします。キャッシュ・サーバーを再起動してから、(前述のJVMパラメータを設定して)YourFirstCoherenceApplication
を再実行します。今回は出力がnull
になります。
アプリケーションで(put
メソッドを使用して)message
キーの値を変更した場合、新しい値はキャッシュ・クライアントで使用できますか。
たとえば、get
メソッドをコメント・アウトしてput
メソッドを追加します。
//String message = (String)myCache.get("message"); String message = (String)myCache.put("message", "bye");
YourFirstCoherenceApplication
を実行します。
キャッシュ・クライアントでget
コマンドを実行します。
Map (mycache): get message
出力としてbye
が表示されます。