この章では、Coherence*Extend、POFコンテキストおよび.NETクライアント・ライブラリ向けに.NETクライアントを構成する方法について説明します。
Coherence for .NETを構成して使用するには、次の5つの基本的な手順が必要です。
クライアント、およびクラスタにある1つ以上のJVMの両方にCoherence*Extendを構成します。
クライアント、およびクラスタの中でCoherence*Extendのクラスタ・サービスを実行しているすべてのJVMにPOFコンテキストを構成します。
Coherence for .NET APIを使用して.NETクライアント・アプリケーションを実装します。
Coherenceクラスタが稼働中であることを確認します。
.NETクライアント・アプリケーションを起動します。
これらの手順の詳細は、次の各項で説明します。
Coherence*Extendを構成するには、クラスタ側とクライアント側両方のキャッシュ・コンフィギュレーション・ディスクリプタに適切な構成要素を追加する必要があります。クラスタ側のキャッシュ・コンフィギュレーション要素からCoherenceのDefaultCacheServerに対して、Coherence*Extendクライアントから受信したTCP/IPリクエストをリスニングするCoherence*Extendクラスタ・サービスを開始するように指示されます。クライアント側のキャッシュ・コンフィギュレーション要素は、クラスタの中でCoherence*Extendクラスタ・サービスを実行している1台以上のサーバーのIPアドレスとポートを特定するためにクライアント・ライブラリで使用されます。これにより、ライブラリをクラスタに接続できます。この構成では、接続やリクエストのタイムアウトなど、接続に関連する様々なパラメータも記述します。
Coherence*ExtendクライアントをCoherenceクラスタに接続するには、そのクラスタにある1つ以上のDefaultCacheServer JVMで、TCP/IP Coherence*Extendクラスタ・サービスを実行している必要があります。このサービスを実行するようにDefaultCacheServerを構成するには、そのDefaultCacheServerで使用するキャッシュ・コンフィギュレーション・ディスクリプタに、子にtcp-acceptor要素を持つproxy-scheme要素を追加する必要があります。これを例14-1に示します。
例14-1 Coherence*Extendに対応したデフォルト・キャッシュ・サーバーの構成
<?xml version="1.0"?>
<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
<cache-config>
<caching-scheme-mapping>
<cache-mapping>
<cache-name>dist-*</cache-name>
<scheme-name>dist-default</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<distributed-scheme>
<scheme-name>dist-default</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>
このキャッシュ・コンフィギュレーション・ディスクリプタは、2つのクラスタ・サービスを定義します。これは、リモートCoherence*ExtendクライアントをTCP/IPでCoherenceクラスタに接続できるようにするサービス、および標準のパーティション・キャッシュ・サービスです。このディスクリプタはDefaultCacheServerで使用しているため、クラスタ・サービスの終了時に自動的に再起動するように、各サービスのautostart構成要素をtrueに設定しておくことが重要です。proxy-scheme要素には、tcp-acceptorという子要素があり、この子要素には、TCP/IPを介してクライアント接続リクエストを受け入れるために必要なTCP/IP固有の情報がすべて含まれます。
前述のように構成されたCoherence*Extendのクラスタ・サービスは、localhostアドレスとport 9099で、受信リクエストをリスニングします。たとえば、dist-extendというCoherenceキャッシュにクライアントが接続しようとすると、Coherence*Extendのクラスタ・サービスがNamedCacheへの後続リクエストを同じ名前で代行します。その名前は、この例ではパーティション・キャッシュとなります。
Coherence*Extendクライアントでは、Coherenceクラスタ内で実行されるCoherence*Extendクラスタ・サービスへの接続およびCoherence*Extendクラスタ・サービスとの通信に、キャッシュ・コンフィギュレーション・ディスクリプタの要素initiator-config内の情報が使用されます。これを例14-2に示します。
例14-2 リモートCoherenceクラスタに接続するための構成
<?xml version="1.0"?>
<cache-config xmlns="http://schemas.tangosol.com/cache">
<caching-scheme-mapping>
<cache-mapping>
<cache-name>dist-extend</cache-name>
<scheme-name>extend-dist</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<remote-cache-scheme>
<scheme-name>extend-dist</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>
</tcp-initiator>
<outgoing-message-handler>
<request-timeout>5s</request-timeout>
</outgoing-message-handler>
</initiator-config>
</remote-cache-scheme>
</caching-schemes>
</cache-config>
このキャッシュ・コンフィギュレーション・ディスクリプタは、リモートCoherenceクラスタに接続するキャッシング・スキームを定義します。remote-cache-scheme要素には、tcp-initiatorという子要素があり、この子要素には、リモートCoherenceクラスタ内でCoherence*Extendクラスタ・サービスが実行されているクライアントへの接続に必要なTCP/IP固有の情報がすべて含まれます。
クライアント・アプリケーションで、たとえばdist-extendという名前を使用してCacheFactoryで名前付きキャッシュを取得すると、Coherence*Extendクライアントは(アドレスlocalhostとport 9099による)TCP/IPを使用してCoherenceクラスタに接続し、INamedCache実装を返します。この実装は、リモート・クラスタの中で実行している同名のNamedCacheにリクエストをルーティングする機能を持っています。remote-addresses構成要素には、子要素socket-addressを複数記述できます。Coherence*Extendのクライアントは、記載されたアドレスをすべて試すか、またはTCP/IP接続が確立されるまで、アドレスへの接続をランダムに試行します。
ネットワーク、ソフトウェア、ハードウェアなどの障害によってクライアントとクラスタ間の接続が切断されたことをCoherence*Extendのクライアント・サービスが検出すると、このCoherence*Extendのクライアント・サービスの実装(ICacheServiceまたはIInvocationService)によってMemberEventHandlerデリゲートを使用してMemberEventType.Leftイベントが発生し、このクライアント・サービスは停止します。クライアント・アプリケーションがその後もこのサービスを使用しようとする場合には、サービス自体が自動的に再起動してクラスタへの再接続を試行します。このサービスが接続に成功するとMemberEventType.Joinedイベントが発生し、接続に失敗するとクライアント・アプリケーションに致命的な例外がスローされます。
Coherence*Extendサービスには、接続の切断を検出するためのメカニズムがいくつか用意されています。その中には、(Extend-TCPのTCP/IPのように)基底プロトコルに固有のものもあれば、サービス自体に実装されるものもあります。後者のメカニズムは、outgoing-message-handler構成要素を使用して構成されます。
接続の切断を検出するためにCoherence*Extendのクライアント・サービスで使用される構成可能な主要メカニズムは、リクエストのタイムアウトです。サービスがリモート・クラスタにリクエストを送信したが、リクエストのタイムアウト時間内にレスポンスを受信しなかった場合(<request-timeout>を参照)、サービスでは接続が切断されたと想定されます。Coherence*Extendのクライアント・サービスおよびクラスタ・サービスは、接続を介して定期的にハートビートを送信するように構成することもできます(<heartbeat-interval>と<heartbeat-timeout>を参照)。構成されたハートビートのタイムアウト時間内にサービスがレスポンスを受信しなかった場合、サービスでは接続が切断されたと想定されます。