この章では、Coherence*Extendクライアントを構築および実行するために必要な、基本的なタスクについて説明します。この章で使用するクライアントの例はJavaベースのExtendクライアントですが、説明する概念はC++および.NET Extendクライアントにも共通しています。C++および.NETのテクノロジに固有の例については、それぞれのディストリビューションの/examples
ディレクトリを参照してください。
この章は次の各項で構成されています。
この章では、一連の手順を使用して、基本的なCoherence*Extendクライアントを作成、構成および実行します。各手順では、拡張プロキシの構成、リモート・キャッシュの構成、リモート起動サービスの構成、Coherence APIの使用など、Coherence*Extendの多数の基本的な概念について説明します。
手順を完了するには、Coherence for Javaをインストールする必要があります。わかりやすくするため、またデプロイしやすくするために、この例では、クライアントとキャッシュ・サーバーを同じコンピュータで実行します。通常は、Extendクライアントとキャッシュ・サーバーは、別々のシステムに配置されます。
この例のExtendクライアントでは、クラスタのキャッシュ構成デプロイメント・ディスクリプタで、拡張プロキシとキャッシュを構成する必要があります。拡張プロキシは、localhost
およびポート9099
でクライアントのTCP/IP通信を受け入れるように構成します。dist-extend
という名前の分散キャッシュを定義し、これを使用してクライアント・データをクラスタに格納します。
クラスタ側を構成する手順は、次のとおりです。
example-config.xml
という名前のXMLファイルを作成します。
このファイルに次の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>dist-extend</cache-name> <scheme-name>extend</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <distributed-scheme> <scheme-name>extend</scheme-name> <lease-granularity>member</lease-granularity> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme> <proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <thread-count>5</thread-count> <acceptor-config> <tcp-acceptor> <local-address> <address>localhost</address> <port>9099</port> </local-address> </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme> </caching-schemes> </cache-config>
ファイルを保存して閉じます。
この例のExtendクライアントには、リモート・キャッシュ・スキームとリモート起動スキームが必要です。リモート・キャッシュ・スキームでは、データのキャッシュに使用するキャッシュをクラスタ上で定義する必要があり、クライアントの接続先となる拡張プロキシのアドレスとポートを指定する必要があります。この例では(ステップ1に基づく)、リモート・キャッシュ・スキームはdist-extend
キャッシュを使用するように構成され、localhost
および9099
に配置されている拡張プロキシに接続します。
この例のExtendクライアントはリモート・キャッシュに問い合せるため、リモート起動スキームが必要です。リモート起動スキームでは、クライアントの接続先となる拡張プロキシのホストとポートも定義する必要があります。
クライアント側を構成する手順は、次のとおりです。
example-client-config.xml
という名前のXMLファイルを作成します。
このファイルに次の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>dist-extend</cache-name> <scheme-name>remote</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <remote-cache-scheme> <scheme-name>remote</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>localhost</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> </remote-cache-scheme> <remote-invocation-scheme> <scheme-name>extend-invocation</scheme-name> <service-name>ExtendTcpInvocationService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>localhost</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> </remote-invocation-scheme> </caching-schemes> </cache-config>
ファイルを保存して閉じます。
例4-1は、CacheService
を使用してリモート・キャッシュ内のInteger
値を増分してから、InvocationService
を使用してキャッシュから値を取得する、単純なクライアントです。最後に、クライアントはシステム出力に値を書き込んでから終了します。
注意: この例は、Coherenceノード(つまりクラスタ内)でもそのまま実行できます。TCP/IPを介してリモート・クラスタ・ノードに送信される操作は、クライアント・アプリケーションに対して完全に透過的になります。 |
サンプル・アプリケーションを作成する手順は、次のとおりです。
テキスト・ファイルを作成します。
このファイルに次のJavaコードをコピーします。
例4-1 Coherence*Extendアプリケーションのサンプル
import com.tangosol.net.AbstractInvocable; import com.tangosol.net.CacheFactory; import com.tangosol.net.InvocationService; import com.tangosol.net.NamedCache; import java.util.Map; public class TestClient { public static void main(String[] asArgs) throws Throwable { NamedCache cache = CacheFactory.getCache("dist-extend"); Integer IValue = (Integer) cache.get("key"); if (IValue == null) { IValue = new Integer(1); } else { IValue = new Integer(IValue.intValue() + 1); } cache.put("key", IValue); InvocationService service = (InvocationService) CacheFactory.getConfigurableCacheFactory() .ensureService("ExtendTcpInvocationService"); Map map = service.query(new AbstractInvocable() { public void run() { setResult(CacheFactory.getCache("dist-extend").get("key")); } }, null); Integer IValue1 = (Integer) map.get(service.getCluster(). getLocalMember()); System.out.print("The value of the key is " + IValue1); } }
TestClient.java
という名前でファイルを保存して閉じます。
次のようにTestClient.java
をコンパイルします。
javac -cp .;COHERENCE_HOME\lib\coherence.jar TestClient.java
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
アプリケーションを検出できる必要があります。
次のコマンドラインでは、キャッシュ・サーバー・プロセスが開始され、tangosol.coherence.cacheconfig
システム・プロパティを使用して、ステップ1で作成したキャッシュ構成ファイルに明示的に名前が付けられます。
java -cp COHERENCE_HOME\coherence.jar;PATH_TO_CLIENT -Dtangosol.coherence.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:9099
java
コマンドを使用してTestClient
アプリケーションを起動し、ステップ2で作成したキャッシュ構成ファイルを使用するように構成する必要があります。
次のコマンドラインでアプリケーションを実行します。ここでは、TestClient
クラスが現在のディレクトリに配置されていると想定しています。キャッシュ構成ファイルは、tangosol.coherence.cacheconfig
システム・プロパティを使用して明示的に名前が付けられます。
java -cp .;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.cacheconfig=PATH\example-client-config.xml TestClient
出力には、クライアントが拡張プロキシのTCPアドレスに正常に接続したことやキャッシュ内のキーの現在の値などが表示されます。クライアントを再度実行すると、キーの値が増分します。