Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Client for .NET Framework 使用の手引


付録A.1 DCCM3とのRPC

Client .NETでは,OpenTP1のサーバだけでなく,DCCM3のサーバともRPCを使用した通信ができます。相手サーバがDCCM3の場合の特徴は次のとおりです。

〈この項の構成〉

(1) 相手サーバの指定方法

DCCM3のサーバとRPCを使用した通信をする場合,相手サーバはサービスグループ名とサービス名で指定します。この指定方法はOpenTP1のサーバに対するRPCと同じです。

(2) 相手サーバのアドレス定義

DCCM3のサーバとRPCを使用した通信をする場合,OpenTP1のネームサービスの管理外にあるサーバを呼び出すため,Client .NET側でサービス名ごとに定義を分けて,サーバのアドレスを定義する必要があります。

サーバのアドレスの定義方法を次に示します。

  1. Client .NET構成定義の<tp1Server>要素のhost属性およびport属性に,それぞれRPC受け付け窓口のホスト名およびポート番号を指定します。

(3) RPCの実行手順

相手サーバのアドレスを定義したあとRPCを実行します。Client .NET構成定義の指定内容によってRPCの実行手順は異なります。

(a) <rapService>要素のautoConnect属性にtrueを指定した場合

  1. OpenRpcメソッドを実行して,定義を読み込みます。

  2. Callメソッドを実行します。

    Client .NET構成定義の<tp1Server>要素で指定したRPC受け付け窓口に,自動でコネクションを確立します。コネクションの確立後,RPCを行います。

(b) <rapService>要素のautoConnect属性にfalseを指定,または指定を省略した場合

  1. OpenRpcメソッドを実行して,定義を読み込みます。

  2. 引数なしのOpenConnectionメソッドを実行します。

    Client .NET構成定義の<tp1Server>要素で指定したRPC受け付け窓口に,コネクションを確立します。

  3. コネクションの確立後,Callメソッドを実行してRPCを行います。

(c) <tp1Server>要素で指定したサーバ以外と通信する場合

  1. OpenRpcメソッドを実行して,定義を読み込みます。

    この手順は省略できます。省略した場合でも,2.および3.は実行できます。

  2. OpenConnectionメソッドの引数にRPC受け付け窓口(ホスト名,ポート番号)を指定して,OpenConnectionメソッド実行します。

  3. コネクションの確立後,Callメソッドを実行してRPCを行います。

(4) DCCM3論理端末に対してRPCを行う場合の負荷分散

Client .NETとDCCM3論理端末が常設コネクションを使用してRPCを行う場合,コネクション確立時に接続先を複数のDCCM3に振り分けて負荷を分散できます。Client .NETは,Client .NET構成定義の<tp1Server>要素に指定された複数のDCCM3論理端末のホスト名およびポート番号の中から,Client .NET構成定義の<rapService>要素のrandomSelect属性にYを指定することで,接続先をランダムに選択し,接続を試みます。あるDCCM3論理端末との接続に失敗すると,それ以外のDCCM3論理端末を<tp1Server>要素に指定された順で選択し,接続を試みます。これを繰り返し,Client .NET構成定義の<tp1Server>要素に指定されたすべてのDCCM3論理端末との接続にすべて失敗したときに,初めてエラーを検知します。

Client .NETとDCCM3論理端末との通信方法を次に示します。

  1. Client .NET構成定義の<tp1Server>要素にDCCM3論理端末のホスト名およびポート番号を指定し,引数なしのOpenConnectionメソッドを実行します。

    この場合,常設コネクションを使用します。

  2. Client .NET構成定義の<tp1Server>要素にDCCM3論理端末のホスト名およびポート番号,<rapService>要素のrandomSelect属性にtrueを指定します。

  3. Client .NET構成定義の<rapService>要素のautoConnect属性にtrueを指定した場合,Callメソッドを実行します。Callメソッドを実行すると,コネクション未確立時には,自動でコネクションを確立します。

    Client .NET構成定義の<rapService>要素のautoConnect属性にfalseを指定,または指定を省略した場合,引数なしのOpenConnectionメソッドを実行します。引数なしのOpenConnectionメソッドを実行すると,コネクションを確立します。

(5) Client .NET構成定義の定義例

次の図で動くような,DCCM3接続時のClient .NET構成定義の定義例を示します。

図A‒1 DCCM3のサーバとのRPC

[図データ]

  1. Client .NET構成定義で,各トランザクションを処理するサーバのアドレス(RPC受け付け窓口)を,プロファイルIDを分けて<tp1Server>要素に定義します。

  2. RPCを行うとき,プロファイルIDからRPC受け付け窓口のアドレスを求め,RPCのメッセージを送信します。

  3. RPCのメッセージを解釈し,要求されたサービスを実行します。

  4. 同期応答型RPCの場合,サーバからの応答メッセージを受信します。

定義例
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section
      name="hitachi.opentp1.client"
      type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
            Hitachi.OpenTP1.Client,Version=7.0.0.0,
            Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,Custom=null" />
  </configSections>
 
  <hitachi.opentp1.client>
    <common>
      <rpc use="rap" watchTime="180" />
      <rapService autoConnect="true" randomSelect="true" />
    </common>
    <profile id="tran1">
      <!--"TRAN1"のトランザクションを処理できるサーバのアドレスを定義-->
      <tp1Server host="xxx.xxx.xxx.xxx" port="10020" />
      <tp1Server host="zzz.zzz.zzz.zzz" port="10022" />
    </profile>
    <profile id="tran2">
      <!--"TRAN2"のトランザクションを処理できるサーバのアドレスを定義-->
      <tp1Server host="yyy.yyy.yyy.yyy" port="10021" />
      <tp1Server host="zzz.zzz.zzz.zzz" port="10022" />
    </profile>
  </hitachi.opentp1.client>
</configuration>

上記のClient .NET構成定義を使用したプログラム例を次に示します。

プログラム例
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Client;
 
public class DCCM3Caller
{
  ...
  public void Function1(){
    TP1Client clt = new TP1Client();
 
    // TRAN1のトランザクションを呼び出すRPC
    clt.OpenRpc("tran1");
    ...
    // 同期応答型RPC
    clt.Call("dummysvg", "TRAN1", ..., TP1ClientFlags.DCNOFLAGS);
    ...
    clt.CloseRpc();
 
    // TRAN2のトランザクションを呼び出すRPC
    // 要求先のサーバアドレス取得のために定義を読み直す
    clt.OpenRpc("tran2");
    ...
    // 非応答型RPC
    clt.Call("dummysvg", "TRAN2", ..., TP1ClientFlags.DCRPC_NOREPLY);
    ...
    clt.CloseRpc();
  }
}

(6) DCCM3論理端末に対してRPCを行う場合の注意事項