この章では、Coherenceの基本的なサンプルを作成および実行するための手順を示し、Coherenceの様々な基本概念について説明します。サンプル・アプリケーションは、簡単なHello Worldアプリケーションであり、スタンドアロンのJavaアプリケーションおよびJSPアプリケーションとして実装されます。最後のJDeveloperに関する項には、Coherenceによる開発時にJDeveloperをセットアップするためのいくつかの基本手順が記載されています。
注意: この章のサンプルは、基本的なものであり、一般的な概念を説明することのみを目的としています。より高度なサンプルが必要な場合は、ドキュメント・ライブラリのCoherenceのサンプルをダウンロードしてください。 |
この章は次の各項で構成されています。
キャッシュは、キャッシュ構成デプロイメント・ディスクリプタ内に定義されており、アプリケーション内で名前によって参照されます。このため、アプリケーションのコードを変更せずにキャッシュの構成を変更できます。次のキャッシュ構成では、キャッシュ名hello-example
にマップされた基本的な分散キャッシュを定義しています。
キャッシュのサンプルを定義するには:
XMLファイルexample-config.xml
を作成します。
次の分散キャッシュの定義をファイルにコピーします。
<?xml version="1.0"?> <!DOCTYPE cache-config SYSTEM "cache-config.dtd"> <cache-config> <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つのプロセスは単一のマシン上に置かれます。キャッシュ・サーバーは、デフォルトでキャッシュ・データを格納するように構成されます。
サンプルのクラスタでは、オペレーション・オーバーライド・ファイルを使用して出荷状態のデフォルト・クラスタ構成を修正します。具体的には、デフォルト構成を修正してプライベート・クラスタを作成し、ネットワーク上で実行されている可能性のある既存のCoherenceクラスタに2つのプロセスが参加しないようにします。また、デフォルト構成を修正して、デフォルトのキャッシュ構成ファイルのかわりにexample-config.xml
がロードされるようにします。
サンプルのクラスタを構成して起動するには:
tangosol-coherence-override.xml
という名前のファイルを作成します。
次のオーバーライド構成を追加して、cluster_name
およびport
をクラスタ内で一意の値に置き換えます。たとえば、クラスタ名に自分の名前を使用し、ポート番号に電話番号の最後の4桁を使用します。
<?xml version='1.0'?> <!DOCTYPE coherence SYSTEM "coherence.dtd"> <coherence> <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\lib\coherence.jar;COHERENCE_HOME\config 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\lib\coherence.jar;COHERENCE_HOME\config 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\lib\coherence.jar;COHERENCE_HOME\config 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\lib\coherence.jar;COHERENCE_HOME\config com.tangosol.net.CacheFactory
キャッシュ・ファクトリ・インスタンスが起動し、クラスタのメンバーとなり、コマンドライン・ツールのコマンド・プロンプトを返します。
コマンドライン・ツールのコマンド・プロンプトで、cache
コマンドを使用してhello-example
キャッシュを取得します。
cache hello-example
コマンドライン・ツールのコマンド・プロンプトで、list
コマンドを使用してキャッシュの内容を取得します。
list
コマンドは次の文字列を返し、表示します。
k2 = Hello World!
この項では、Coherenceの開発用にJDeveloperをセットアップするための基本手順を説明します。
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.class
」を選択して、「開く」をクリックします。次のようにデフォルトの実行ターゲットとしてDefaultCacheServer
クラスが指定されます。
ヒント: 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によって適切なDTDがロードされ、「コンポーネント・パレット」内にDTDの要素がすべてリストされます。さらに、JDeveloperは、構成ファイルをDTDと照合して検証し、XMLコードを完了させます。次の手順によって、キャッシュ構成ファイルとオペレーション・オーバーライド・ファイルが作成されます。同一の手順を、任意のCoherence構成ファイルに対して使用できます。
JDeveloperでキャッシュ構成ファイルとオペレーション・オーバーライド・ファイルを作成するには:
COHERENCE_HOME
\lib\coherence.jar
ライブラリのcache-config.dtd
およびcoherence.dtd
を、自分のコンピュータのディレクトリに解凍します。
JDeveloperの「アプリケーション・ナビゲータ」でCoherenceのプロジェクトをダブルクリックします。「プロジェクト・プロパティ」ダイアログ・ボックスが表示されます。
「プロジェクトのソースパス」ノードを展開して「リソース」をクリックします。「リソース」ページが表示されます。
「リソース」セクションで「追加」をクリックしてDTDファイルが解凍されたディレクトリを選択します。
「対象」タブで「追加」をクリックしてDTDファイルを選択します。個々のファイルを明示的に追加するのでなく、ディレクトリ内のすべてのファイルをまとめて追加することもできます。
「OK」をクリックします。次のようにDTDが「対象」タブにリストされます。
「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。プロジェクトのDTDが「アプリケーション・ナビゲータ」の「リソース」フォルダの下にリストされます。
「ファイル」メニューで「新規」をクリックします。「新規ギャラリ」ダイアログ・ボックスが表示されます。
「カテゴリ」セクションで「一般」ノードを展開し、「XML」をクリックします。
「XMLドキュメント」を選択して「OK」をクリックします。XMLファイルの作成ダイアログ・ボックスが表示されます。
ファイル名として「coherence-cache-config.xml
」を入力して、DTDと同じディレクトリに保存します。実行時に、このファイルがクラスパス内のcoherence.jar
ファイルの前に置かれている必要があります。
「OK」をクリックします。プロジェクトのキャッシュ構成ファイルが作成され、編集用に開かれて、「アプリケーション・ナビゲータ」の「リソース」フォルダの下にリストされます。
ファイルの先頭に次のDOCTYPE
を追加します。
<?xml version="1.0" ?> <!DOCTYPE cache-config SYSTEM "cache-config.dtd">
「コンポーネント・パレット」がリフレッシュされ、cache-config.dtd
ファイル内の使用可能な要素がすべてリストされます。
coherence-cache-config.xml
ファイルを保存します。
ステップ8から12を繰り返して、オペレーション・オーバーライド・ファイルtangosol-coherence-override.xml
を作成します。実行時に、このファイルがクラスパスに存在する必要があります。
ファイルの先頭に次のDOCTYPE
を追加します。
<?xml version="1.0" ?> <!DOCTYPE coherence SYSTEM "coherence.dtd">
「コンポーネント・パレット」がリフレッシュされ、coherence.dtd
ファイル内の使用可能な要素がすべてリストされます。
tangosol-coherence-override.xml
ファイルを保存します。