この章の内容は次のとおりです。
この章では、一連の手順を使用して、基本的なCoherence*Extendクライアントを作成、構成および実行します。各手順では、拡張プロキシの構成、リモート・キャッシュの構成、リモート起動サービスの構成、Coherence APIの使用など、Coherence*Extendの多数の基本的な概念について説明します。
手順を完了するには、Coherence for Javaをインストールする必要があります。わかりやすくするため、またデプロイしやすくするために、この例では、クライアントとキャッシュ・サーバーを同じコンピュータで実行します。通常は、Extendクライアントとキャッシュ・サーバーは、別々のシステムに配置されます。
この例のExtendクライアントでは、クラスタのキャッシュ構成デプロイメント・ディスクリプタで、プロキシとキャッシュを構成する必要があります。この例で構成される拡張プロキシは、プロキシ・ポートが自動的に割り当てられ、クライアントTCP/IP通信をリスニングします。dist-extend
という名前の分散キャッシュを定義し、これを使用してクライアント・データをクラスタに格納します。
クラスタ側を構成する手順は、次のとおりです。
例のクライアントはリモート・キャッシュに問い合せ、リモート・クラスタ・ノードで実行されるタスクの起動も行います。これらの操作を完了するために、この例のExtendクライアントに、リモート・キャッシュ・スキームとリモート起動スキームが必要です。タスクの起動は応用例と見なされます。
リモート・キャッシュ・スキームには、クライアントの接続先のクラスタ上にあるプロキシ・サービスのサービス名と一致するサービス名が含まれます。さらに、クラスタで使用されるキャッシュ名もリモート・キャッシュ・スキームの名前として使用する必要があります。この例(ステップ1に基づく)では、リモート・キャッシュ・スキームのサービス名はExtendTcpCacheService
で、キャッシュ名はdist-extend
です。最後に、リモート・キャッシュ・スキームには、クラスタのネーム・サービスのアドレスとポートが含まれ、これらはプロキシの検出に使用されます。ネーム・サービスは、デフォルトで7574のクラスタ・ポート上で実行されます。
この例のExtendクライアントはリモート・キャッシュのタスクを起動するため、リモート起動スキームが必要です。リモート起動スキームはExtendTcpInvocationService
サービスを定義し、これによってクライアントはInvocable
インスタンスを作成して、それを処理のためにクラスタに送信できます。リモート起動スキームでは、ネーム・サービスを使用してプロキシを検出し、接続先のプロキシ・サービスの名前が含まれます。
クライアント側を構成する手順は、次のとおりです。
GUID-6FFEAAD8-C2BE-49A4-A349-58DD854A242C.htm#GUID-2E360BF7-1541-4997-97F2-9D3739AE3B48__CHDFDFBAは、CacheService
を使用してリモート・キャッシュ内のInteger
値を増分してから、InvocationService
を使用してキャッシュから値を取得する、単純なクライアントです。最後に、クライアントはシステム出力に値を書き込んでから終了します。
注意:
クライアント・クラスは、クラスタ内のすべてのキャッシュ・サーバーのクラスパス上にある必要があります。TestClient$1
クラスは、コンパイル中に生成される匿名の内部クラスです。これはシリアライズ化されて、クラスタ・メンバー上で実行されているInvocationService
に送信されます。この例では、クライアントおよびクラスタ・メンバーが1つのコンピュータ上で実行されています。このため、両方のJava起動が同じクラスパスを使用します。
この例は、Coherenceノード(つまりクラスタ内)でもそのまま実行できます。TCP/IPを介してリモート・クラスタ・ノードに送信される操作は、クライアント・アプリケーションに対して完全に透過的になります。
サンプル・アプリケーションを作成する手順は、次のとおりです。
Coherence*Extend InvocationService
当然、Coherence*Extendクライアントはクラスタやクラスタ内で実行されているメンバーを直接認識しないため、Coherence*Extend InvocationService
のInvocable
タスクを実行できるのは、クライアントが接続されているJVMに対してのみです。したがって、必ずnullメンバーをquery()
メソッドに設定して渡す必要があります。結果として、実行による単一の結果がローカルのMember
を使用してキー設定されます(クライアントがクラスタの一部でない場合はnullに設定されます)。このMember
は、service.getCluster().getLocalMember()
をコールすることで取得できます。またCoherence*Extend InvocationService
は、同期タスクの実行のみをサポートします(つまりexecute()
メソッドはサポートされません)。
拡張プロキシは、キャッシュ・サーバーのプロセス(DefaultCacheServer
)の一環として開始されます。キャッシュ・サーバーは、ステップ1で作成したキャッシュ構成を使用するように構成する必要があります。また、キャッシュ・サーバー・プロセスは、実行時にクラスパス上でTestClient
アプリケーションを検出できる必要があります。
次のコマンド行では、キャッシュ・サーバー・プロセスが開始され、coherence.cacheconfig
システム・プロパティを使用して、ステップ1で作成したキャッシュ構成ファイルに明示的に名前が付けられます。
java -cp COHERENCE_HOME\lib\coherence.jar;PATH_TO_CLIENT -Dcoherence.cacheconfig=PATH\example-config.xml com.tangosol.net.DefaultCacheServer
コンソール出力をチェックして、プロキシ・サービスが開始されていることを確認します。出力メッセージは次のようになります。
(thread=Proxy:ExtendTcpProxyService:TcpAcceptor, member=1): TcpAcceptor now listening for connections on 192.168.1.5:7077
java
コマンドを使用してTestClient
アプリケーションを起動し、ステップ2で作成したキャッシュ構成ファイルを使用するように構成する必要があります。
次のコマンド行でアプリケーションを実行します。ここでは、TestClient
クラスが現在のディレクトリに配置されていると想定しています。キャッシュ構成ファイルは、coherence.cacheconfig
システム・プロパティを使用して明示的に名前が付けられます。
java -cp .;COHERENCE_HOME\lib\coherence.jar -Dcoherence.cacheconfig=PATH\example-client-config.xml TestClient
出力には、クライアントが拡張プロキシのTCPアドレスに正常に接続したことやキャッシュ内のキーの現在の値などが表示されます。クライアントを再度実行すると、キーの値が増分します。
注意:
キャッシュ・サーバー・プロセスの出力に、起動タスクがExtendTcpInvocationService
サービスを使用してリモートに実行されたことを確認するメッセージがあるか調べます。
This has been run...