Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


2.1.13 別トランザクションによるRPC同期応答

別トランザクションによるRPC同期応答は,応答型RPCを受信したルートトランザクションブランチだけで使用できます。

通常の応答型RPCでは,サービストランザクション起動時のサービス関数の引数として指定した応答データ格納領域(out)に,サーバUAPが応答データを格納し,サービス関数終了時にRPC応答メッセージとしてクライアントUAPに送信します。

サーバUAPで応答型RPCを受信したトランザクション(サービス)は,ee_rpc_reply_suspend関数【CBLEERPC('R-SPEND ')】を呼び出すと,サービス終了に伴うRPC応答メッセージをクライアントUAPに送信しません。別の任意のトランザクション(サービス)からee_rpc_reply_send関数を呼び出して,クライアントUAPにRPC応答メッセージを送信します。

ee_rpc_reply_suspend関数を呼び出したあと,RPC関連定義のrpc_reply_suspend_timeオペランド,またはee_rpc_reply_suspend関数の引数で指定した時間以内にee_rpc_reply_send関数【CBLEERPC('R-SEND ')】を呼び出さない場合,RPCエラー応答メッセージが自動的に送信されます。以降にee_rpc_reply_send関数を呼び出しても,ee_rpc_reply_send関数はエラーになります。

別トランザクションによるRPC同期応答処理の流れを次の図に示します。

図2‒18 別トランザクションによるRPC同期応答処理の流れ

[図データ]

注意事項
  • ee_rpc_reply_suspend関数を呼び出している状態でスレッドダウンした場合,スレッドの回復処理時にRPC応答メッセージは送信されません。そのため,ユーザの回復処理でRPC応答メッセージを送信する必要があります。

  • 応答型RPC以外では,ee_rpc_reply_suspend関数を呼び出せません。応答型RPC以外で呼び出した場合,ee_rpc_reply_suspend関数はエラーリターンします。

  • RPC応答メッセージ抑止限界時間の監視は5秒間隔で行われます。このため,RPCエラー応答メッセージの送信は,RPC関連定義のrpc_reply_suspend_timeオペランドの指定値より最大で5秒の遅延が発生する場合があります。

TP1/EE再開始時のRPC応答メッセージ抑止状態引き継ぎ

TP1/EEの再開始時にRPC応答メッセージ抑止状態を引き継ぐかどうかは,RPC関連定義のrpc_reply_suspend_recoverオペランドで指定します。

rpc_reply_suspend_recoverオペランドにYを指定した場合,前回のRPC応答メッセージ抑止状態をTP1/EEの再開始時に引き継ぎます。

rpc_reply_suspend_recoverオペランドにNを指定した場合,前回のRPC応答メッセージ抑止状態をTP1/EEの再開始時に引き継ぎません。

また,rpc_reply_suspend_recoverオペランドにYを指定している場合,rpc_reply_suspend_autosendオペランドにYを指定したときは,TP1/EEの再開始時にRPC応答メッセージ抑止状態を自動的に解除し,RPCエラー応答メッセージを送信します。

RPC応答メッセージ抑止中のTP1/EEの終了

RPC応答メッセージ抑止中にTP1/EEを正常終了させた場合,RPC応答メッセージ抑止状態を自動的に解除し,RPCエラー応答メッセージを送信します。