Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 クライアント使用の手引 TP1/Client/J編


2.9.1 DCCM3とのRPC

TP1/Client/Jでは,OpenTP1のサーバだけでなく,DCCM3のサーバともRPCを使用した通信ができます。DCCM3とRPCを行うには,DCCM3側に,OpenTP1のRPC要求を解釈する機能が組み込まれていることが前提です。次に示す製品をDCCM3側に組み込むことで,DCCM3ともRPCを使用した通信ができます。

DCCM3側の適用OSがVOS3の場合

DCCM3/Internet

DCCM3側の適用OSがVOS1の場合

DCCM3/SERVER/TP1

相手サーバがDCCM3の場合の特徴は次のとおりです。

〈この項の構成〉

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

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

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

DCCM3のサーバとRPCを使用した通信をする場合,OpenTP1のネームサービスの管理外にあるサーバを呼び出すため,TP1/Client/J側でサービス名ごとに定義を分けて,サーバのアドレスを定義する必要があります。サーバのアドレスを定義するには,TP1/Client/J環境定義のdchostオペランドに,それぞれRPC受け付け窓口のホスト名およびポート番号を指定します。

(3) RPCの実行手順

相手サーバのアドレスを定義したあとRPCを実行します。TP1/Client/J環境定義の指定内容によって次に示すようにRPCの実行手順は異なります。

(a) dcrapautoconnectオペランドにYを指定した場合

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

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

    TP1/Client/J環境定義のdchostオペランドで指定したRPC受け付け窓口に,コネクションが確立されます。コネクションの確立後,RPCが行われます。

(b) dcrapautoconnectオペランドにNを指定した場合,または指定を省略した場合

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

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

    TP1/Client/J環境定義のdchostオペランドで指定したRPC受け付け窓口に,コネクションが確立されます。

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

(c) dchostオペランドで指定したサーバ以外と通信する場合

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

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

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

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

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

TP1/Client/JとDCCM3論理端末が常設コネクションを使用してRPCを行う場合,コネクション確立時に接続先を複数のDCCM3に振り分けて負荷を分散できます。TP1/Client/Jは,TP1/Client/J環境定義のdchostselectオペランドにYを指定することで,TP1/Client/J環境定義のdchostオペランドに指定された複数のDCCM3論理端末のホスト名およびポート番号の中から,接続先をランダムに選択し,接続を試みます。あるDCCM3論理端末との接続に失敗すると,それ以外のDCCM3論理端末をdchostオペランドに指定された順で選択し,接続を試みます。この処理を繰り返し,TP1/Client/J環境定義のdchostオペランドに指定されたすべてのDCCM3論理端末との接続にすべて失敗したときに,初めてエラーを検知します。

TP1/Client/JがDCCM3論理端末と通信する場合のTP1/Client/J環境定義とコネクションを確立するメソッドの関係を次の表に示します。

表2‒7 DCCM3論理端末と通信する場合のTP1/Client/J環境定義とコネクションを確立するメソッド

項番

TP1/Client/J環境定義dcrapautoconnect

コネクションを確立するメソッド

1

Y

rpcCall

2

N

openConnection(引数なし)

3

省略

注※

コネクションが確立されていない場合,自動でコネクションを確立します。

(5) TP1/Client/J環境定義の定義例

次に示す図のように動く,DCCM3接続時のTP1/Client/J環境定義の定義例を示します。

図2‒34 DCCM3のサーバとのRPC

[図データ]

  1. TP1/Client/J環境定義で,各トランザクションを処理するサーバのアドレス(RPC受け付け窓口)を,定義ファイルを分けてdchostオペランドに定義します。

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

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

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

定義ファイル"tran1.ini"の定義例
dcrapdirect=Y
dcwatchtim=180
dcrapautoconnect=Y
dchostselect=Y
#"TRAN1"のトランザクションを処理できるサーバのアドレスを定義
dchost=xxx.xxx.xxx.xxx:10020,zzz.zzz.zzz.zzz:10022
定義ファイル"tran2.ini"の定義例
dcrapdirect=Y
dcwatchtim=180
dcrapautoconnect=Y
dchostselect=Y
#"TRAN2"のトランザクションを処理できるサーバのアドレスを定義
dchost=yyy.yyy.yyy.yyy:10021,zzz.zzz.zzz.zzz:10022

上記のTP1/Client/J環境定義を使用したプログラム例を次に示します。

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

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