Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option 使用の手引


3.1.10 TP1/EEまたはTP1/Server BaseとRPC通信をする場合

TP1/EEとTP1/Server Base,またはTP1/EE同士がRPC通信をする場合に設定する必要があるシステム定義または関数について説明します。

TP1/Server Baseのシステム定義についてはマニュアル「OpenTP1 システム定義」を,TP1/Server Baseの関数についてはマニュアル「OpenTP1 プログラム作成リファレンス C言語編」またはマニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。

〈この項の構成〉

(1) サービスの要求元とは別のノードにサービスがある場合

サービスの要求元とは別のノードにサービスがある場合,サービス要求をトランザクションにするかどうかを選択できます。

(a) TP1/EEがサーバUAPで,TP1/Server BaseがクライアントUAPの場合

TP1/EEがサーバUAPで,TP1/Server BaseがクライアントUAPの場合,TP1/Server Base側で次に示す項目を設定する必要があります。

■ dc_rpc_call関数を使用してサービス要求をする場合

dc_rpc_call関数を使用してサービス要求をする場合のflags引数を次の表に示します。

表3‒4 dc_rpc_call関数のflags引数

RPCの種類

サービス要求

flags引数

同期応答型

トランザクションにする場合

DCNOFLAGS

トランザクションにしない場合

DCRPC_TPNOTRAN

非同期応答型

トランザクションにする場合

DCRPC_NOWAIT

トランザクションにしない場合

DCRPC_NOWAIT|DCRPC_TPNOTRAN

非応答型

トランザクションにする場合

DCRPC_NOREPLY

トランザクションにしない場合

DCRPC_NOREPLY|DCRPC_TPNOTRAN

サービス要求先のTP1/EEでネームサービスを使用したくない場合は,次に示す定義を指定してください。ネームサービスへサービス情報を問い合わせないため,ネットワークに掛かる負荷を軽減できます。

ユーザサービス定義のrpc_destination_modeオペランド

特に指定する必要はありません。デフォルト値(definition)のままとしてください。

ユーザサービスネットワーク定義のdcsvgdef定義コマンドの-hオプション

TP1/EEのサービスグループ情報関連定義のmysvgdef定義コマンドの-hオプションで指定したホスト名およびポート番号と同じ値を指定してください。

■ dc_rpc_call_to関数を使用してサービス要求をする場合

dc_rpc_call_to関数を使用してサービス要求をする場合のdirection引数およびflags引数を次に示します。

direction

DCRPC_DIRECT_SCHEDULE関数を使用して作成したDCRPC_BINDING_TBL構造体のアドレスを指定してください。

flags

次の表に従ってflags引数を指定してください。

表3‒5 dc_rpc_call_to関数のflags引数

RPCの種類

サービス要求

flags引数

同期応答型

トランザクションにする場合

DCNOFLAGS

トランザクションにしない場合

DCRPC_TPNOTRAN

非同期応答型

トランザクションにする場合

DCRPC_NOWAIT

トランザクションにしない場合

DCRPC_NOWAIT|DCRPC_TPNOTRAN

非応答型

トランザクションにする場合

DCRPC_NOREPLY

トランザクションにしない場合

DCRPC_NOREPLY|DCRPC_TPNOTRAN

DCRPC_DIRECT_SCHEDULE関数の引数

DCRPC_DIRECT_SCHEDULE関数の引数の設定を次に示します。

nid

TP1/Server Baseのシステム共通定義のnode_idオペランドで指定したノード識別子と同じ値を指定してください。

hostnm

TP1/EEのサービスグループ情報関連定義のmysvgdef定義コマンドの-hオプションで指定したホスト名およびポート番号と同じ値を指定してください。

scdport

TP1/EEのサービスグループ情報関連定義のmysvgdef定義コマンドの-hオプションで指定したホスト名およびポート番号と同じ値を指定してください。

(b) TP1/Server BaseがサーバUAPで,TP1/EEがクライアントUAPの場合

TP1/Server BaseがサーバUAPで,TP1/EEがクライアントUAPの場合,TP1/EE側で次に示す項目を設定する必要があります。

■ ee_rpc_call関数を使用してサービス要求をする場合

ee_rpc_call関数を使用してサービス要求をする場合のflags引数を次の表に示します。

表3‒6 ee_rpc_call関数のflags引数

RPCの種類

サービス要求

flags引数

同期応答型

トランザクションにする場合

EENOFLAGS

トランザクションにしない場合

EERPC_TPNOTRAN

非同期応答型

トランザクションにする場合

EERPC_NOWAIT

トランザクションにしない場合

EERPC_NOWAIT|EERPC_TPNOTRAN

非応答型

トランザクションにする場合

EERPC_NOREPLY

トランザクションにしない場合

EERPC_NOREPLY|EERPC_TPNOTRAN

■ ee_rpc_call_to関数を使用してサービス要求をする場合

ee_rpc_call_to関数を使用してサービス要求する場合のdirection引数およびflags引数を次に示します。

direction

EERPC_BINDING_TBL構造体のアドレスを指定してください。

flags

次の表に従ってflags引数を指定してください。

表3‒7 ee_rpc_call_to関数のflags引数

RPCの種類

サービス要求

flags引数

同期応答型

トランザクションにする場合

EENOFLAGS

トランザクションにしない場合

EERPC_TPNOTRAN

非同期応答型

トランザクションにする場合

EERPC_NOWAIT

トランザクションにしない場合

EERPC_NOWAIT|EERPC_TPNOTRAN

非応答型

トランザクションにする場合

EERPC_NOREPLY

トランザクションにしない場合

EERPC_NOREPLY|EERPC_TPNOTRAN

EERPC_BINDING_TBL構造体の引数

次の表に従ってEERPC_BINDING_TBL構造体の引数を設定してください。

表3‒8 EERPC_BINDING_TBL構造体の引数

サービス要求先の特定方法

EERPC_BINDING_TBL構造体の引数

nid

hostnm

portno

flags

ノード識別子を指定

TP1/Server Base(サーバ)側のサービス受信口となるノード識別子

NULL

0

EENOFLAGS

ネームサーバを指定

NULL

TP1/Server Base(サーバ)側のサービス受信口となるホスト名

TP1/Server Base(サーバ)側のネームサービスのポート番号

EERPC_NAMPORT

スケジュールサービスのポートを指定

NULL

TP1/Server Base(サーバ)側のサービス受信口となるホスト名

TP1/Server Base(サーバ)側のスケジュールサービスのポート番号

EERPC_SCDPORT

(2) 自ノード内でサービスを実行する場合

サービス要求先とサービス要求元が同じノード内にある場合に,RPC関連定義のrpc_connect_unixdomainオペランドの指定を省略するか,またはYを指定すると,サービス要求元はUNIXドメインプロトコルを通して,UNIXドメインソケットを使用してサービス要求をします。UNIXドメインを使用すると,通信性能が上がります。このため,通常はrpc_connect_unixdomainオペランドの指定を省略するか,またはYを指定してください。ただし通信性能が向上することで,TCP/IPのバッファが不足したり,バッファ不足に伴うリトライが多発したりして,全体の性能が低下するおそれがあります。そのような場合に,rpc_connect_unixdomainオペランドにNを指定すると,通信性能は低下しますが,全体の性能は良くなることがあります。

なお,TP1/EEでは,RPC関連定義のrpc_multi_tp1_in_same_hostオペランドの指定に従い,UNIXドメインソケット用のパス名を生成します。

(a) TP1/Server BaseとRPC通信する場合

TP1/EEがサーバUAPでTP1/Server BaseがクライアントUAPの場合,またはTP1/Server BaseがサーバUAPでTP1/EEがクライアントUAPの場合,次に示すオペランドの指定値を同一にしておく必要があります。

  • TP1/EEのRPC関連定義のrpc_multi_tp1_in_same_hostオペランド

  • TP1/Server Baseのシステム共通定義のrpc_multi_tp1_in_same_hostオペランド

(b) サーバUAPとクライアントUAPが共にTP1/EEの場合

サービス要求先とサービス要求元のRPC関連定義のrpc_multi_tp1_in_same_hostオペランドの指定値を同一にしておく必要があります。