ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Coherenceリモート・クライアントの開発
12c (12.1.2)
B70742-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

3 最初のExtendクライアントの構築

この章では、Coherence*Extendクライアントを構築および実行するために必要な、基本的なタスクについて説明します。この章で使用するクライアントの例はJavaベースのExtendクライアントですが、説明する概念はC++および.NET Extendクライアントにも共通しています。C++および.NETの完全な例は、Coherence for Javaディストリビューションの一部として配布されているCoherenceの例を参照してください。

この章には次の項が含まれます:

3.1 Extendサンプルの概要

この章では、一連の手順を使用して、基本的なCoherence*Extendクライアントを作成、構成および実行します。各手順では、拡張プロキシの構成、リモート・キャッシュの構成、リモート起動サービスの構成、Coherence APIの使用など、Coherence*Extendの多数の基本的な概念について説明します。

手順を完了するには、Coherence for Javaをインストールする必要があります。わかりやすくするため、またデプロイしやすくするために、この例では、クライアントとキャッシュ・サーバーを同じコンピュータで実行します。通常は、Extendクライアントとキャッシュ・サーバーは、別々のシステムに配置されます。

3.2 ステップ1: クラスタ側の構成

この例のExtendクライアントでは、クラスタのキャッシュ構成デプロイメント・ディスクリプタで、拡張プロキシとキャッシュを構成する必要があります。拡張プロキシは、localhostおよびポート9099でクライアントのTCP/IP通信を受け入れるように構成します。dist-extendという名前の分散キャッシュを定義し、これを使用してクライアント・データをクラスタに格納します。

クラスタ側を構成する手順は、次のとおりです。

  1. example-config.xmlという名前のXMLファイルを作成します。

  2. このファイルに次の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>
             <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>
    
  3. ファイルを保存して閉じます。

3.3 ステップ2: クライアント側の構成

この例のExtendクライアントには、リモート・キャッシュ・スキームとリモート起動スキームが必要です。リモート・キャッシュ・スキームでは、データのキャッシュに使用するキャッシュをクラスタ上で定義する必要があり、クライアントの接続先となる拡張プロキシのアドレスとポートを指定する必要があります。この例では(ステップ1に基づく)、リモート・キャッシュ・スキームはdist-extendキャッシュを使用するように構成され、localhostおよび9099に配置されている拡張プロキシに接続します。

この例のExtendクライアントはリモート・キャッシュに問い合せるため、リモート起動スキームが必要です。リモート起動スキームでは、クライアントの接続先となる拡張プロキシのホストとポートも定義する必要があります。

クライアント側を構成する手順は、次のとおりです。

  1. example-client-config.xmlという名前のXMLファイルを作成します。

  2. このファイルに次の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>
    
  3. ファイルを保存して閉じます。

3.4 ステップ3: サンプル・クライアントの作成

例3-1は、CacheServiceを使用してリモート・キャッシュ内のInteger値を増分してから、InvocationServiceを使用してキャッシュから値を取得する、単純なクライアントです。最後に、クライアントはシステム出力に値を書き込んでから終了します。


注意:

この例は、Coherenceノード(つまりクラスタ内)でもそのまま実行できます。TCP/IPを介してリモート・クラスタ・ノードに送信される操作は、クライアント・アプリケーションに対して完全に透過的になります。


サンプル・アプリケーションを作成する手順は、次のとおりです。

  1. テキスト・ファイルを作成します。

  2. このファイルに次のJavaコードをコピーします。

    例3-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);
            }
    }
    
  3. TestClient.javaという名前でファイルを保存して閉じます。

  4. 次のようにTestClient.javaをコンパイルします。

    javac -cp .;COHERENCE_HOME\lib\coherence.jar TestClient.java
    

Coherence*Extend InvocationService

当然、Coherence*Extendクライアントはクラスタやクラスタ内で実行されているメンバーを直接認識しないため、Coherence*Extend InvocationServiceInvocableタスクを実行できるのは、クライアントが接続されているJVMに対してのみです。したがって、必ずnullメンバーをquery()メソッドに設定して渡す必要があります。結果として、実行による単一の結果がローカルのMemberを使用してキー設定されます(クライアントがクラスタの一部でない場合はnullに設定されます)。このMemberは、service.getCluster().getLocalMember()をコールすることで取得できます。またCoherence*Extend InvocationServiceは、同期タスクの実行のみをサポートします(つまりexecute()メソッドはサポートされません)。

3.5 ステップ4: キャッシュ・サーバー・プロセスの開始

拡張プロキシは、キャッシュ・サーバーのプロセス(DefaultCacheServer)の一環として開始されます。キャッシュ・サーバーは、ステップ1で作成したキャッシュ構成を使用するように構成する必要があります。また、キャッシュ・サーバー・プロセスは、実行時にクラスパス上でTestClientアプリケーションを検出できる必要があります。

次のコマンドラインでは、キャッシュ・サーバー・プロセスが開始され、tangosol.coherence.cacheconfigシステム・プロパティを使用して、ステップ1で作成したキャッシュ構成ファイルに明示的に名前が付けられます。

java -cp COHERENCE_HOME\lib\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

3.6 ステップ5: アプリケーションの実行

javaコマンドを使用してTestClientアプリケーションを起動し、ステップ2で作成したキャッシュ構成ファイルを使用するように構成する必要があります。

次のコマンドラインでアプリケーションを実行します。ここでは、TestClientクラスが現在のディレクトリに配置されていると想定しています。キャッシュ構成ファイルは、tangosol.coherence.cacheconfigシステム・プロパティを使用して明示的に名前が付けられます。

java -cp .;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.cacheconfig=PATH\example-client-config.xml TestClient

出力には、クライアントが拡張プロキシのTCPアドレスに正常に接続したことやキャッシュ内のキーの現在の値などが表示されます。クライアントを再度実行すると、キーの値が増分します。