プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceリモート・クライアントの開発
12c (12.1.3)
E56210-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

13 リモート起動の実行(C++)

この章では、C++クライアントからCoherenceキャッシュでリモート起動を実行する手順を示します。

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

13.1 リモート起動の実行の概要(C++)

Invocableは任意のアクションを実行でき、作業を行うために必要な任意のクラスタ側サービス(キャッシュ・サービスやグリッド・サービスなど)を使用できます。Invocableの操作はステートフルにすることもできます。つまり、その状態がシリアライズされ、Invocableが実行されるグリッド・ノードに転送されます。

Coherence for C++では、クライアントが接続されているクラスタ側JVM内でのInvocableの実行を可能にするリモート起動サービスを提供しています。JavaでのInvocableは、com.tangosol.net.Invocableインタフェースを実装する単純な実行可能アプリケーション・クラスです。Coherence for C++でInvocableを採用するには、InvocableのC++実装であるcoherence::net::Invocableを提供するほかに、InvocableタスクのコンパイルされたJava実装をクラスタ側ノードにデプロイする必要があります。実行はサーバー側(つまりJava)で行われるため、C++のInvocableは状態にのみ関係します。メソッド自体はno-operation(操作なし)になっている場合があります。

13.2 リモート起動サービスの構成と使用

リモート起動サービスは、キャッシュ構成ディスクリプタのremote-invocation-scheme要素を使用して構成します。例13-1は、リモート起動スキーム構成のサンプルを示しています。

例13-1 リモート起動スキーム構成のサンプル

<remote-invocation-scheme>
    <scheme-name>example-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>
      </tcp-initiator>

      <outgoing-message-handler>
        <request-timeout>30s</request-timeout>
      </outgoing-message-handler>
    </initiator-config>
</remote-invocation-scheme>

coherence::net::CacheFactoryクラスを使用することによって、構成済リモート起動サービスへの参照を名前によって取得できます。

例13-2 リモート起動サービスへの参照

InvocationService::Handle hService = hService::getService("ExtendTcpInvocationService");

クライアントが接続されているグリッド・ノードでエージェントを実行するために必要なコードは、次の1行のみです。

Map::View hResult = hService->query(myTask::create(), NULL);

問合せから返されたMapには、問合せが実行されたメンバーがキー設定されます。Extendクライアントの場合はメンバーシップの概念がないため、結果には、CacheFactory::getConfigurableCacheFactory()::GetLocalMember()をコールして取得されるローカル・メンバーがキー設定されます。

13.3 Invocable実装クラスの登録

キャッシュされた値オブジェクト同様、すべてのInvocable実装クラスは、C++アプリケーション(「PortableObject (自己シリアライズ)」を参照)のPOFコンテキストおよびクライアントが接続されているクラスタ側ノードのPOFコンテキストに正しく登録する必要があります。したがって、InvocableタスクのJava実装(com.tangosol.net.Invocable実装)は、クラスタ側ノードで作成、コンパイルおよびデプロイする必要があります。

詳細は、「クラスタでのカスタム型の登録」を参照してください。