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の場合の特徴は次のとおりです。
-
使用できるRPCの形態は,同期応答型RPCと非応答型RPCです。連鎖型RPCは使用できません。
-
トランザクション制御機能は使用できません。
-
常設コネクションを使用してDCCM3論理端末へRPCを行う場合,負荷分散機能を使用できます。詳細については,「2.9.1(4) DCCM3論理端末に対してRPCを行う場合の負荷分散」を参照してください。
-
DCCM3に対してRPCを行う場合,サービス名がトランザクション名称と評価されます。
- 〈この項の構成〉
(1) 相手サーバの指定方法
DCCM3のサーバとRPCを使用した通信をする場合,相手サーバをサービスグループ名とサービス名で指定します。この指定方法はOpenTP1のサーバに対してRPCを行う場合と同じです。
-
サービスグループ名
サービスグループ名として不正でないダミーの文字列を指定します。1〜31文字の識別子を指定してください。
-
サービス名
DCCM3側のトランザクション名称を指定します。使用できる文字は,アルファベット(A〜Z,a〜z)と数字(0〜9)です。文字数の合計が1〜8文字になるように指定してください。
(2) 相手サーバのアドレス定義
DCCM3のサーバとRPCを使用した通信をする場合,OpenTP1のネームサービスの管理外にあるサーバを呼び出すため,TP1/Client/J側でサービス名ごとに定義を分けて,サーバのアドレスを定義する必要があります。サーバのアドレスを定義するには,TP1/Client/J環境定義のdchostオペランドに,それぞれRPC受け付け窓口のホスト名およびポート番号を指定します。
(3) RPCの実行手順
相手サーバのアドレスを定義したあとRPCを実行します。TP1/Client/J環境定義の指定内容によって次に示すようにRPCの実行手順は異なります。
(a) dcrapautoconnectオペランドにYを指定した場合
-
rpcOpenメソッドを実行して,定義を読み込みます。
-
rpcCallメソッドを実行します。
TP1/Client/J環境定義のdchostオペランドで指定したRPC受け付け窓口に,コネクションが確立されます。コネクションの確立後,RPCが行われます。
(b) dcrapautoconnectオペランドにNを指定した場合,または指定を省略した場合
-
rpcOpenメソッドを実行して,定義を読み込みます。
-
引数なしのopenConnectionメソッドを実行します。
TP1/Client/J環境定義のdchostオペランドで指定したRPC受け付け窓口に,コネクションが確立されます。
-
コネクションの確立後,rpcCallメソッドを実行してRPCを行います。
(c) dchostオペランドで指定したサーバ以外と通信する場合
-
rpcOpenメソッドを実行して,定義を読み込みます。
この手順は省略できます。省略した場合でも,2.および3.は実行できます。
-
openConnectionメソッドの引数にRPC受け付け窓口(ホスト名およびポート番号)を指定して,openConnectionメソッド実行します。
-
コネクションの確立後,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環境定義とコネクションを確立するメソッドの関係を次の表に示します。
項番 |
TP1/Client/J環境定義dcrapautoconnect |
コネクションを確立するメソッド |
---|---|---|
1 |
Y |
rpcCall※ |
2 |
N |
openConnection(引数なし) |
3 |
省略 |
(5) TP1/Client/J環境定義の定義例
次に示す図のように動く,DCCM3接続時のTP1/Client/J環境定義の定義例を示します。
-
TP1/Client/J環境定義で,各トランザクションを処理するサーバのアドレス(RPC受け付け窓口)を,定義ファイルを分けてdchostオペランドに定義します。
-
RPCを行うとき,定義ファイルからRPC受け付け窓口のアドレスを求め,RPCのメッセージを送信します。
-
RPCのメッセージを解釈し,要求されたサービスを実行します。
-
同期応答型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を行う場合の注意事項
-
リモートAPI機能を使用したRPCだけ使用できます。
-
連鎖型RPCは使用できません。
-
トランザクション制御機能は使用できません。
-
文字列のデータを含むメッセージを送受信する場合は,あらかじめメッセージ中の文字コードを通信先システムと決めた上で,必要に応じてUAPで文字コード変換を行ってください。Java上では,Unicodeが文字列データのメモリ上の内部表現として使用されます。
-
TP1/Client/J環境定義のdccltinquiretimeオペランドを指定しても無効になります。CUPからサーバに対する問い合わせ間隔最大時間は,DCCM3の「端末放置監視時間」で指定してください。
-
常設コネクション,かつオートコネクトモードを使用したシステムで,rapサーバが常設コネクションを解放するタイミングと,CUP実行プロセスがRPCを実行するタイミングが重なった場合,RPCの実行に失敗して例外を返すことがあります。この現象を回避するには,TP1/Client/J環境定義のdcinquiretimecheckオペランドにYを指定し,dccltinquiretimeオペランドにDCCM3の「端末放置監視時間」と同じ値を指定してください。dcinquiretimecheckオペランド,およびdccltinquiretimeオペランドの説明については「5.2.2 オペランド」を参照してください。
-
DCCM3側の注意事項については,マニュアル「VOS3 データマネジメントシステム XDM E2系 解説」およびマニュアル「VOS1 データコミュニケーションマネジメントシステム DCCM3 解説」を参照してください。