2 最初のExtendアプリケーションの構築
この章の内容は次のとおりです。
- Extendサンプルの概要
Coherence*Extendの例では、一連のステップを使用して基本的なCoherence*Extendクライアントを作成、構成および実行します。 - ステップ1: クラスタ側の構成
この例のExtendクライアントでは、クラスタのキャッシュ構成デプロイメント・ディスクリプタで、プロキシとキャッシュを構成する必要があります。 - ステップ2: クライアント側の構成
この例のクライアントは、リモート・キャッシュに問い合せ、リモート・クラスタ・ノードで実行されるタスクの起動も行います。 - ステップ3: サンプル・クライアントの作成
この例のクライアント・アプリケーションは、CacheService
を使用してリモート・キャッシュ内のInteger
値を増分してから、InvocationService
を使用してキャッシュから値を取得する、シンプルなクライアントです。 - ステップ4: キャッシュ・サーバー・プロセスの開始
拡張プロキシは、キャッシュ・サービス・プロセス(DefaultCacheServer
)の一環として開始されます。 - ステップ5: アプリケーションの実行
TestClient
アプリケーションはjava
コマンドを使用して起動し、キャッシュ構成ファイルを使用するように構成する必要があります。
親トピック: はじめに
Extendサンプルの概要
ステップを完了するには、Coherence for Javaをインストールする必要があります。わかりやすくするため、またデプロイしやすくするために、この例では、クライアントとキャッシュ・サーバーを同じコンピュータで実行します。通常は、Extendクライアントとキャッシュ・サーバーは、別々のシステムに配置されます。
親トピック: 最初のExtendアプリケーションの作成
ステップ1: クラスタ側の構成
dist-extend
という名前の分散キャッシュを定義し、これを使用してクライアント・データをクラスタに格納します。
クラスタ側を構成するには:
親トピック: 最初のExtendアプリケーションの作成
ステップ2: クライアント側の構成
リモート・キャッシュ・スキームには、クライアントの接続先のクラスタ上にあるプロキシ・サービスのサービス名と一致するサービス名が含まれます。さらに、クラスタで使用されるキャッシュ名もリモート・キャッシュ・スキームの名前として使用する必要があります。この例(ステップ1に基づく)では、リモート・キャッシュ・スキームのサービス名はExtendTcpCacheService
で、キャッシュ名はdist-extend
です。最後に、リモート・キャッシュ・スキームには、クラスタのネーム・サービスのアドレスとポートが含まれ、これらはプロキシの検出に使用されます。ネーム・サービスは、デフォルトで7574のクラスタ・ポート上で実行されます。
この例のExtendクライアントはリモート・キャッシュのタスクを起動するため、リモート起動スキームが必要です。リモート起動スキームはExtendTcpInvocationService
サービスを定義し、これによってクライアントはInvocable
インスタンスを作成して、それを処理のためにクラスタに送信できます。リモート起動スキームでは、ネーム・サービスを使用してプロキシを検出し、接続先のプロキシ・サービスの名前が含まれます。
クライアント側を構成するには:
親トピック: 最初のExtendアプリケーションの作成
ステップ3: サンプル・クライアントの作成
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()
メソッドはサポートされません)。
親トピック: 最初のExtendアプリケーションの作成
ステップ4: キャッシュ・サーバー・プロセスの開始
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
親トピック: 最初のExtendアプリケーションの作成
ステップ5: アプリケーションの実行
TestClient
アプリケーションはjava
コマンドを使用して起動し、キャッシュ構成ファイルを使用するように構成する必要があります。次のコマンド行でアプリケーションを実行します。ここでは、TestClient
クラスが現在のディレクトリに配置されていると想定しています。キャッシュ構成ファイルは、coherence.cacheconfig
システム・プロパティを使用して明示的に名前が付けられます。
java -cp .;COHERENCE_HOME\lib\coherence.jar -Dcoherence.cacheconfig=PATH\example-client-config.xml TestClient
出力には、クライアントが拡張プロキシのTCPアドレスに正常に接続したことやキャッシュ内のキーの現在の値などが表示されます。クライアントを再度実行すると、キーの値が増分します。
ノート:
キャッシュ・サーバー・プロセスの出力に、起動タスクがExtendTcpInvocationService
サービスを使用してリモートに実行されたことを確認するメッセージがあるか調べます。
This has been run...
親トピック: 最初のExtendアプリケーションの作成