Hitachi

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


2.7.1 会話型サービス

〈この項の構成〉

(1) コネクションの確立

CUPは会話型サービスとのコネクションを確立します。コネクションを確立する場合は,tpconnect関数を呼び出します。tpconnect関数でコネクションを確立したUAPプロセスをオリジネータ,相手のUAPプロセスをサブオーディネータと呼びます。

コネクションを確立するOpenTP1ノードはユーザ認証の有無によって次のようになります。ユーザ認証機能については,「2.1 ユーザ認証機能」を参照してください。

ユーザ認証を行う場合

ユーザ認証に成功したOpenTP1ノードです。

ユーザ認証を抑止する場合

dc_clt_cltin_s関数の引数target_hostに指定したOpenTP1ノード,またはクライアント環境定義DCHOSTに指定したOpenTP1ノードです。両方指定した場合,dc_clt_cltin_s関数の引数target_hostに指定したノードが優先されます。

なお,ユーザ認証を抑止し,dc_clt_cltin_s関数の引数target_hostにNULLを指定,かつクライアント環境定義DCHOSTの指定を省略した場合,常設コネクションの確立に失敗します。

tpconnect関数が正常終了した場合には,確立したコネクションを識別する記述子が返されます。この記述子を,通信する関数に設定して通信します。

会話型サービスでtpreturn関数を呼び出して処理を終了すると,コネクションは切断されます。

tpconnect関数では,引数flagsに,制御権を持つかどうかを設定します。制御権ありで設定したプロセスは,tpsend関数を呼び出し,データを送信できます。制御権なしで設定すると,通信相手のプロセスに制御権が渡され,tpconnect関数を呼び出したプロセスはtprecv関数を呼び出し,データを受信できます。

(2) データの送信

データを送信するときは,tpsend関数を呼び出します。tpsend関数を呼び出す場合は,引数には,tpconnect関数で返された記述子を設定して,使用するコネクションを特定します。

tpsend関数は,コネクションの制御権を持つ側だけが発行できます。制御権を持たない側がtpsend関数を呼び出した場合,tpsend関数はエラーリターンします。

コネクションの制御権を通信相手のプロセスに渡したい場合は,tpsend関数の引数で設定します。

(3) データの受信

データを受信するときは,tprecv関数を呼び出します。データは非同期に受信します。tprecv関数はコネクションの制御権を持たないプロセスだけ発行できます。

引数の設定によっては,tprecv関数はデータを受信するまで待ちます。

tprecv関数を呼び出したプロセスがトランザクション下にある場合,最大応答待ち時間は,クライアント環境定義DCCLTTREXPTMまたはクライアントサービス定義trn_expiration_timeで指定した値となります。この場合,最大応答待ち時間を超えると,CUP実行プロセスは異常終了します。ただし,tprecv関数はエラーリターンしません。

tprecv関数を呼び出したプロセスがトランザクション下にない場合,最大応答待ち時間は,クライアントサービス定義のwatch_timeで指定した値となります。この場合,最大応答待ち時間を超えると,tprecv関数はエラーリターンします。

(4) コネクションの切断

会話型サービスの処理が終了してtpreturn関数を呼び出すと,コネクションは正常に切断されます。また,通信中にエラーが発生した場合,コネクションが切断されることがあります。

(5) コネクションの強制切断

何らかの理由でコネクションを強制的に切断する場合は,tpdiscon関数を呼び出します。tpdiscon関数に設定された記述子は,それ以降の処理では無効になります。トランザクションはロールバックされます。

(6) トランザクションの生成

XATMIインタフェースを使用して通信を行うCUPで,CUPからトランザクションを生成する場合は,dc_trn_begin_s関数を呼び出します。

トランザクションを生成するタイミングを次の表に示します。

表2‒10 トランザクションを生成するタイミング

dc_clt_connect_s関数発行済み

dc_clt_connect_s関数未発行

tpconnect関数

発行済み

tpconnect関数

未発行

tpconnect関数

発行済み

tpconnect関数

未発行

×

(凡例)

○:トランザクションを生成し,XATMIインタフェースによる会話型サービスとの通信ができます。

×:トランザクションは生成できますが,XATMIインタフェースによる会話型サービスとの通信はできません。

(7) OpenTP1のdc_rpc_call_s関数との併用

tpconnect関数を呼び出して会話型サービスとのコネクションを確立したあとでもdc_rpc_call_s関数は発行できます。

会話型サービスの通信形態を次の図に示します。

図2‒37 会話型サービスの通信形態

[図データ]