この章では、Coherenceの基本的なサンプルを作成および実行するための手順を示し、Coherenceの様々な基本概念について説明します。サンプル・アプリケーションは、簡単なHello Worldアプリケーションであり、スタンドアロンのJavaアプリケーションおよびJSPアプリケーションとして実装されます。最後のJDeveloperに関する項には、Coherenceによる開発時にJDeveloperをセットアップするためのいくつかの基本手順が記載されています。
|
注意: この章のサンプルは、基本的なものであり、一般的な概念を説明することのみを目的としています。より高度なサンプルが必要な場合は、ドキュメント・ライブラリのCoherenceのサンプルをダウンロードしてください。 |
この章は次の各項で構成されています。
キャッシュは、キャッシュ構成デプロイメント・ディスクリプタ内に定義されており、アプリケーション内で名前によって参照されます。このため、アプリケーションのコードを変更せずにキャッシュの構成を変更できます。次のキャッシュ構成では、キャッシュ名hello-exampleにマップされた基本的な分散キャッシュを定義しています。
キャッシュのサンプルを定義するには:
XMLファイルexample-config.xmlを作成します。
次の分散キャッシュの定義をファイルにコピーします。
<?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>hello-example</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>
ファイルを保存して閉じます。
キャッシュはCoherenceクラスタ上にホストされます。Coherenceを実行するJVMプロセスはすべて、実行時に自動的にクラスタに参加し、クラスタによって提供されるキャッシュおよびその他のサービスにアクセス可能になります。クラスタに参加したJVMは、クラスタ・ノードまたはクラスタ・メンバーと呼ばれます。この章のサンプル・アプリケーションでは、キャッシュ・サーバー・プロセスとHello Worldアプリケーション・プロセスの2つの個別のJavaプロセスによってクラスタが形成されます。簡素化を図るため、この2つのプロセスは単一のマシン上に置かれます。この2つのプロセスは1つのコンピュータ上に共存します。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。
サンプルのクラスタでは、オペレーション・オーバーライド・ファイルを使用して出荷状態のデフォルト・クラスタ構成を修正します。具体的には、デフォルト構成を修正してプライベート・クラスタを作成し、ネットワーク上で実行されている可能性のある既存のCoherenceクラスタに2つのプロセスが参加しないようにします。また、デフォルト構成を修正して、デフォルトのキャッシュ構成ファイルのかわりにexample-config.xmlがロードされるようにします。
サンプルのクラスタを構成して起動するには:
tangosol-coherence-override.xmlという名前のファイルを作成します。
次のオーバーライド構成を追加して、cluster_nameおよびportをクラスタ内で一意の値に置き換えます。たとえば、クラスタ名に自分の名前を使用し、ポート番号に電話番号の最後の4桁を使用します。
<?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>
<multicast-listener>
<address>224.3.6.0</address>
<port>port</port>
<time-to-live>0</time-to-live>
</multicast-listener>
</cluster-config>
<configurable-cache-factory-config>
<init-params>
<init-param>
<param-type>java.lang.String</param-type>
<param-value system-property="tangosol.coherence.cacheconfig">
example-config.xml</param-value>
</init-param>
</init-params>
</configurable-cache-factory-config>
</coherence>
example-config.xmlファイルが保存されているディレクトリにファイルを保存します。
コマンド・プロンプトから、DefaultCacheServerクラスを使用してキャッシュ・サーバー・インスタンスを起動し、coherence.jarライブラリおよび構成ファイルの場所をJavaの -cpオプションで指定します。例:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar com.tangosol.net.DefaultCacheServer
ステップ3では、サンプルのHello Worldアプリケーションの作成、サンプルの実行と検証などの、一連の手順を実行します。アプリケーションはコマンド・ラインから実行され、キャッシュ・サーバーに参加するキャッシュ・ノードを起動します。そして、キーk1と値Hello World!をhello-exampleキャッシュに入れます。キー値の取得と出力が済むとアプリケーションが終了します。最後に、追加のクラスタ・ノードが起動され、キーがキャッシュ内にあることが確認されます。
アプリケーションは、Coherence APIを使用してキャッシュにアクセスし、キャッシュとの相互作用を図ります。CacheFactoryクラスはキャッシュ・インスタンスの取得のために使用され、NamedCacheインタフェースはキャッシュからのオブジェクトの取得と格納のために使用されます。Hello Worldアプリケーションは非常に基本的ですが、CacheFactoryクラスとNamedCacheインタフェースの使用方法を実際に示します。
例4-1 サンプルのHelloWorldスタンドアロン・アプリケーション
package com.examples;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class HelloWorld {
public static void main(String[] args) {
String key = "k1";
String value = "Hello World!";
CacheFactory.ensureCluster();
NamedCache cache = CacheFactory.getCache("hello-example");
cache.put(key, value);
System.out.println((String)cache.get(key));
CacheFactory.shutdown();
}
}
サンプルのスタンドアロン・アプリケーションを実行するには:
コマンド・プロンプトからHello Worldアプリケーションをコンパイルします。例:
javac -cp COHERENCE_HOME\lib\coherence.jar com\examples\HelloWorld.java
Hello Worldアプリケーションを実行します。Javaの-cpオプションを使用して、coherence.jarライブラリの場所と構成ファイルを指定します。また、クライアントがパーティション化されたデータをローカルに保存しないように制限します。例:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.distributed.localstorage=false com.example.HelloWorld
Hello Worldアプリケーションが起動します。キャッシュ・ファクトリ・インスタンスが作成され、クラスタのメンバーになります。値Hello World!を持つキーk1がhello-exampleキャッシュにロードされます。次に、このキーがキャッシュから取得され、その値が出力の一部に含まれます。最後に、キャッシュ・ファクトリがシャットダウンされてクラスタを離脱すると、Hello Worldアプリケーションが終了します。
この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、Hello Worldアプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。
この手順では、接続ファクトリ・コマンドライン・ツールを使用して、hello-exampleキャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。ここでは、Coherenceのキャッシュが永続性と分散性の両方の性質を持っていることを示します。
キャッシュを確認するには:
コマンド・プロンプトから、CacheFactoryクラスを使用してスタンドアロンのキャッシュ・ファクトリ・インスタンスを起動し、coherence.jarライブラリおよび構成ファイルの場所を、Java -cpオプションを使用して指定します。例:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.distributed.localstorage=false com.tangosol.net.CacheFactory
キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンドライン・ツールのコマンド・プロンプトを返します。
コマンドライン・ツールのコマンド・プロンプトで、cacheコマンドを使用してhello-exampleキャッシュを取得します。
cache hello-example
コマンドライン・ツールのコマンド・プロンプトで、listコマンドを使用してキャッシュの内容を取得します。
list
コマンドは次の文字列を返し、表示します。
k1 = Hello World!
ステップ4では、Hello WorldアプリケーションをJSPページとして再実装するなどの、一連の手順を実行します。サンプルをJavaEEサーバーにデプロイされるWebアプリケーションとしてパッケージ化する手順も含まれています。アプリケーションはアプリケーション・サーバー上で実行され、キャッシュ・サーバーに参加するキャッシュ・ノードを起動します。キーk2と値Hello World!がhello-exampleキャッシュに入れられ、キーの値が取得および出力されてからアプリケーションが終了します。最後に、追加のクラスタ・ノードが起動され、キーがキャッシュ内にあることが確認されます。
サンプルのWebアプリケーションを作成するには:
次のように基本のWebアプリケーション・ディレクトリ構造を作成します。
/ /WEB-INF /WEB-INF/classes /WEB-INF/lib
次のJSPをテキスト・ファイルにコピーして、hello.jspという名前でWebアプリケーション・ディレクトリのルートに保存します。
例4-2 サンプルのHello World JSP
<html>
<head>
<title>My First Coherence Cache</title>
</head>
<body>
<h1>
<%@ page language="java"
import="com.tangosol.net.CacheFactory,
com.tangosol.net.NamedCache"
%>
<%
String key = "k2";
String value = "Hello World!";
CacheFactory.ensureCluster();
NamedCache cache = CacheFactory.getCache("hello-example");
cache.put(key, value);
out.println((String)cache.get(key));
CacheFactory.shutdown();
%>
</h1>
</body>
</html>
次の空のWebアプリケーション・デプロイメント・ディスクリプタをテキスト・ファイルにコピーして、web.xmlという名前で/WEB-INFディレクトリに保存します。
<?xml version = '1.0' ?> <web-app/>
coherence.jarファイルをWEB-INF/libディレクトリにコピーします。
example-config.xmlファイルとtangosol-coherence-override.xmlファイルをWEB-INF/classesディレクトリにコピーします。
jarユーティリティを使用してWeb ARchive(WAR)ファイルを作成し、hello.warという名前で保存します。たとえば、Webアプリケーション・ディレクトリのルートでコマンド・プロンプトから次のコマンドを発行します。
jar -cvf hello.war *
アーカイブには次のファイルが含まれます。
/hello.jsp /WEB-INF/web.xml /WEB-INF/classes/example-config.xml /WEB-INF/classes/tangosol-coherence-override.xml /WEB-INF/lib/coherence.jar
サンプルのWebアプリケーションをデプロイおよび実行するには:
hello.warファイルをJavaEEサーバーにデプロイします。
ブラウザから次のURLを使用してhello.jspファイルにアクセスし、Hello Worldアプリケーションを実行します。hostおよびportを、デプロイメント固有の値に置き換えます。
http://host:port/hello/hello.jsp
Hello Worldアプリケーションが起動します。キャッシュ・ファクトリ・インスタンスが作成され、クラスタのメンバーになります。値Hello World!を持つキーk2がhello-exampleキャッシュにロードされます。次に、このキーがキャッシュから取得され、その値がブラウザに表示されます。最後にキャッシュ・ファクトリがシャットダウンされ、クラスタを離脱します。
この例のキャッシュ・サーバーは、デフォルトでキャッシュのデータを格納するように構成されます。データは、クラスタのすべてのメンバーが使用可能であり、それらのメンバーがクラスタから離脱した後も保持されます。たとえば、Hello Worldアプリケーションは、キャッシュにキーをロードし、そのキーを表示してから終了します。ただし、キャッシュとキーは、その後もすべてのクラスタ・メンバーが使用できます。
この手順では、接続ファクトリ・コマンドライン・ツールを使用して、hello-exampleキャッシュに接続し、キャッシュ内のすべての項目を一覧表示します。ここでは、Coherenceのキャッシュが永続性と分散性の両方の性質を持っていることを示します。
キャッシュを確認するには:
コマンド・プロンプトから、CacheFactoryクラスを使用してスタンドアロンのキャッシュ・ファクトリ・インスタンスを起動し、coherence.jarライブラリおよび構成ファイルの場所を、Java -cpオプションを使用して指定します。例:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.distributed.localstorage=false com.tangosol.net.CacheFactory
キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンドライン・ツールのコマンド・プロンプトを返します。
コマンドライン・ツールのコマンド・プロンプトで、cacheコマンドを使用してhello-exampleキャッシュを取得します。
cache hello-example
コマンドライン・ツールのコマンド・プロンプトで、listコマンドを使用してキャッシュの内容を取得します。
list
コマンドは次の文字列を返し、表示します。
k2 = Hello World!
この項では、Coherenceの開発用にJDeveloperをセットアップするための基本手順を説明します。この説明は、IDE内でCoherenceを実行するためのものであり、開発時の一般的なアプローチになります。説明はJDeveloperに固有のものですが、任意のIDEで同じアプローチが可能です。具体的な手順は、IDEのドキュメントを参照してください。
JDeveloperを使用してキャッシュ・サーバー(DefaultCacheServer)およびキャッシュ・インスタンス(CacheFactory)を実行できます。各インスタンスはそれぞれ別のJavaプロセスとして起動され、標準出力をプロセス・ログに記録します。キャッシュ・コマンドなどの入力は、コマンド・ラインから起動された場合と同様にプロセスに直接入力できます。この構成では、Coherenceソリューションの開発とテストが可能です。
JDeveloperでCoherenceを実行するには:
JDeveloperで、単一のプロジェクトを含む新規の汎用アプリケーションを作成します。初めてJDeveloperを使用する場合は、オンライン・ヘルプで詳細な手順を参照してください。
「アプリケーション・ナビゲータ」で新規のプロジェクトをダブルクリックします。「プロジェクト・プロパティ」ダイアログ・ボックスが表示されます。
「ライブラリとクラスパス」ノードを選択します。「ライブラリとクラスパス」ページが表示されます。
「ライブラリとクラスパス」ページで「JAR/ディレクトリの追加」をクリックします。「アーカイブまたはディレクトリの追加」ダイアログ・ボックスが表示されます。
ディレクトリ・ツリーから「COHERENCE_HOME\lib\coherence.jar」を選択して、「選択」をクリックします。次のように、coherence.jarライブラリが「クラスパス・エントリ」リストに表示されます。

「プロジェクト・プロパティ」ダイアログ・ボックスで、「実行/デバッグ/プロファイル」ノードを選択します。「実行/デバッグ/プロファイル」ページが表示されます。
「実行/デバッグ/プロファイル」ページで「新規」をクリックします。「実行構成の作成」ダイアログ・ボックスが表示されます。「名前」テキスト・ボックスに新規の実行構成の名前を入力します。「設定のコピー元」ドロップダウン・ボックスで「デフォルト」を選択します。「OK」をクリックします。新規の実行構成が「実行構成」リストに表示されます。
「実行構成」リストから、新規の実行構成を選択して「編集」をクリックします。「実行構成の編集」ダイアログ・ボックスが表示され、「起動設定」ノードが選択されます。
「起動設定」ページで「参照」をクリックして「デフォルトの実行ターゲット」を選択します。「デフォルトの実行ターゲットの選択」ダイアログ・ボックスが表示されます。
ディレクトリ・ツリーから「COHERENCE_HOME\lib\coherence.jar\com\」を選択して、「開く」をクリックします。次のようにデフォルトの実行ターゲットとして
tangosol\net\DefaultCacheServer.classDefaultCacheServerクラスが指定されます。

|
ヒント: Coherenceのシステム・プロパティを設定するには、「Javaオプション」テキスト・ボックスを使用します。 |
「ツール設定」ノードを選択します。「ツール設定」ページが表示されます。
「追加実行オプション」セクションで「プログラムの入力を許可」チェック・ボックスを選択します。ボックス内のチェック・マークは、オプションが選択されていることを示します。
「OK」をクリックします。
ステップ6から14を繰り返し、次のようにデフォルトの実行ターゲットとしてCOHERENCE_HOME\lib\coherence.jarを選択します。
\com\tangosol\net\CacheFactory.class

「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。
「実行」ボタンのドロップダウン・リストからキャッシュ・サーバーの実行構成を選択して起動します。キャッシュ・サーバーのインスタンスが起動され、次のように出力がプロセスのログ・タブに表示されます。

「実行」ボタンのドロップダウン・リストからキャッシュの実行構成を選択して起動します。キャッシュのインスタンスが起動され、次のように出力がプロセスのログ・タブに表示されます。

キャッシュ・ファクトリの実行中ログタブの下部にある入力テキスト・ボックスを使用してキャッシュ・インスタンスに関する操作を実行します。たとえば、「help」と入力して「Enter」キーを押すと、有効なコマンドのリストが表示されます。
Javaでは、スレッドとスレッドによって保持されているすべてのロックのリストを標準出力にダンプできます。これは、Linux環境ではkillコマンド、Windows環境では[Ctrl]+[Break]で実行できます。スレッド・ダンプは、デッドロックの検出など、開発段階でのトラブルシューティングに役立ちます。
JDeveloperでCoherenceソリューションを開発する場合は、プロセスのログ・タブにスレッド・ダンプを直接表示できます。そのためには、JDeveloperで実行されているJavaプロセスに前述の信号を送信します。
JDeveloperでスレッド・ダンプを表示するには:
シェルまたはコマンド・プロンプトから、JDK_HOME/bin/jpsを使用して、スレッド・ダンプを表示するJavaプロセスのプロセスID(PID)を取得します。
Linuxの場合、kill -3 PIDを使用して、QUITシグナルをプロセスに送信します。Windowsの場合、[Ctrl]+[Break]のシグナルをリモートJavaプロセスに送信するため、SendSignalなどのサード・パーティ・ツールを使用する必要があります。
JDeveloperでは、スレッド・ダンプをプロセスのログに出力できます。
JDeveloperを使用してCoherenceの構成ファイルを作成できます。JDeveloperによって適切なXSDファイルがロードされ、「コンポーネント・パレット」内に要素がすべてリストされます。さらに、JDeveloperは、構成ファイルをXSDと照合して検証し、XMLコードを完了させます。次の手順によって、キャッシュ構成ファイルとオペレーション・オーバーライド・ファイルが作成されます。同一の手順を、任意のCoherence構成ファイルに対して使用できます。
JDeveloperでキャッシュ構成ファイルとオペレーション・オーバーライド・ファイルを作成するには:
COHERENCE_HOME\lib\coherence.jarライブラリのcoherence-cache-config.xsd、coherence-cache-config-base.xsd、coherence-operational-config.xsd、coherence-operational-config-base.xsdおよびcoherence-config-base.xsdを自分のコンピュータのディレクトリに解凍します。
JDeveloperの「アプリケーション・ナビゲータ」でCoherenceのプロジェクトをダブルクリックします。「プロジェクト・プロパティ」ダイアログ・ボックスが表示されます。
「プロジェクトのソースパス」ノードを展開して「リソース」をクリックします。「リソース」ページが表示されます。
「リソース」セクションで「追加」をクリックしてXSDファイルが解凍されたディレクトリを選択します。
「対象」タブで「追加」をクリックしてXSDファイルを選択します。個々のファイルを明示的に追加するのでなく、ディレクトリ内のすべてのファイルをまとめて追加することもできます。
「OK」をクリックします。次のようにXSDが「対象」タブにリストされます。

「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。プロジェクトのXSDが「アプリケーション・ナビゲータ」の「リソース」フォルダの下にリストされます。
「ファイル」メニューで「新規」をクリックします。「新規ギャラリ」ダイアログ・ボックスが表示されます。
「カテゴリ」セクションで「一般」ノードを展開し、「XML」をクリックします。
「XMLドキュメント」を選択して「OK」をクリックします。XMLファイルの作成ダイアログ・ボックスが表示されます。
ファイル名として「coherence-cache-config.xml」を入力して、XSDと同じディレクトリに保存します。実行時に、このファイルがクラスパス内のcoherence.jarファイルの前に置かれている必要があります。
「OK」をクリックします。プロジェクトのキャッシュ構成ファイルが作成され、編集用に開かれて、「アプリケーション・ナビゲータ」の「リソース」フォルダの下にリストされます。
ファイルの先頭に、次のスキーマ参照を追加します。
<?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">
「コンポーネント・パレット」がリフレッシュされ、coherence-cache-config.xsdファイル内の使用可能な要素がすべてリストされます。
coherence-cache-config.xmlファイルを保存します。
ステップ8から12を繰り返して、オペレーション・オーバーライド・ファイルtangosol-coherence-override.xmlを作成します。実行時に、このファイルがクラスパスに存在する必要があります。
ファイルの先頭に、次のスキーマ参照を追加します。
<?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">
「コンポーネント・パレット」がリフレッシュされ、coherence-operational-config.xsdファイル内の使用可能な要素がすべてリストされます。
tangosol-coherence-override.xmlファイルを保存します。