この章では、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アドレスに正常に接続したことやキャッシュ内のキーの現在の値などが表示されます。クライアントを再度実行すると、キーの値が増分します。