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) 相手サーバの指定方法
(2) 相手サーバのアドレス定義
(3) RPCの実行手順
(4) DCCM3論理端末に対してRPCを行う場合の負荷分散
(5) TP1/Client/J環境定義の定義例
(6) DCCM3論理端末に対してRPCを行う場合の注意事項

(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環境定義のdchostオペランドに指定された複数のDCCM3論理端末のホスト名およびポート番号の中から,接続先をランダムに選択し,接続を試みます。あるDCCM3論理端末との接続に失敗すると,それ以外のDCCM3論理端末から再びランダムに選択し,接続を試みます。この処理を繰り返し,TP1/Client/J環境定義のdchostオペランドに指定されたすべてのDCCM3論理端末との接続にすべて失敗したときに,初めてエラーを検知します。

TP1/Client/JとDCCM3論理端末とで通信する場合のAPIの実行順序には,次の2とおりがあります。

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

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

図2-30 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を行う場合の注意事項