3.1.7 トランザクション処理結果によるRPC応答メッセージ送信
同期応答型RPCまたは非同期応答型RPCの場合,トランザクション処理結果に従ってRPC応答メッセージを送信できます。また,サービス関数の終了時に同期点処理で障害が発生した場合に,RPC応答メッセージの送信をERRTRNRの終了時まで抑止することもできます。
(1) トランザクション処理結果に従ったRPC応答メッセージの送信
トランザクション処理結果に従ってRPC応答メッセージを送信するかどうかを,RPC関連定義のrpc_reply_tp1modeオペランドで指定できます。rpc_reply_tp1modeオペランドの指定を省略するか,またはYを指定した場合,トランザクション処理結果がコミットかロールバックかに関係なく,RPC応答メッセージを送信します。rpc_reply_tp1modeオペランドにNを指定した場合,トランザクション処理結果がコミットのときはRPC応答メッセージを送信し,ロールバックなどのコミット以外のときはRPCエラー応答メッセージを送信します。
プロセスダウン時に,トランザクション処理結果に応じてRPCエラー応答メッセージを送信したい場合は,RPC関連定義のrpc_reply_tp1mode_downオペランドにNまたはJを指定します。トランザクション処理結果に応じたRPCエラー応答メッセージを送信することによって,RPC要求元のクライアントUAPでの対処がしやすくなります。なお,トランザクション処理終了後にプロセスダウンした場合は,処理結果がコミットかロールバックかに関係なく,TP1/EE再開始時にRPCエラー応答メッセージを送信します。ただし,該当トランザクションが,リモートAPI機能による自サービスグループへの代理実行要求の場合は,この機能を使用できません。
(2) ERRTRNRによるRPC応答メッセージの送信
RPC応答メッセージの送信をERRTRNRの終了時まで抑止する場合は,ERRTRNRによるRPC応答メッセージ送信機能を使用します。この機能を使用すると,RPC応答メッセージの送信をERRTRNRの終了時まで抑止することによって,UAPの性能が劣化しにくくなります。この機能を使用するには,次に示すように定義を指定する必要があります。
-
RPC関連定義のrpc_reply_errtrnrオペランドにYを指定
-
ユーザサービス関連定義のerrtrnrオペランドを指定
- 注意事項
-
-
rpc_reply_errtrnrオペランドにYを指定している場合に,errtrnrオペランドの指定を省略すると,プロセスダウンします。
-
リモートAPI機能による自サービスグループへの代理実行要求の場合は,この機能を使用できません。
-
この機能は,rpc_reply_tp1modeオペランドの指定値およびERRTRNR終了後のトランザクションの処理結果に関係なく,ルートトランザクションブランチであるサービストランザクションでの同期点処理でERRTRNRが起動された場合に動作します。ただし,DBキュー読み出し時のサービストランザクションでは動作しません。ERRTRNRによるRPC応答メッセージ送信処理の流れを次の図に示します。
-
クライアントUAPが応答型RPCでTP1/EEにサービスを要求します。TP1/EEはサービストランザクションを起動してサーバUAP1にサービスを要求します。
-
同期点処理で障害が発生したため,サービストランザクションでのRPC応答メッセージの送信を抑止します。
-
ユーザがサーバUAP1のサービス関数からサーバUAP2のサービス関数に情報を引き継ぎます。※
-
サービストランザクションが終了したあとで,ERRTRNRが開始します。
-
ERRTRNRはサーバUAP2にサービスを要求します。サーバUAP2からTP1/EEにサービス関数がリターンしたあとで,同期点処理が完了します。
-
2.で抑止していたRPC応答メッセージをERRTRNRが送信します。
- 注※
-
次に示す情報はTP1/EEがERRTRNRのサービス関数に引き継ぎます。それ以外のサービス関数の応答に必要な情報は,ユーザが引き継ぐ必要があります。
-
サービストランザクションのサービス関数のリターン時に設定したサービス関数の応答(out)およびサービス関数の応答の長さ(out_len)
-
トランザクションインタフェース情報の応答要否
-
- 障害が発生した場合の処理
-
サービストランザクションのサービス関数がリターンした時点からERRTRNRが起動されるまでの間にプロセスダウンが発生した場合,TP1/EE再開始時に,RPC要求元のクライアントUAPに対してRPCエラー応答※が送信されます。RPC応答メッセージは送信されません。
ERRTRNRの起動中にスレッドダウンまたはプロセスダウンが発生した場合は,RPC要求元のクライアントUAPに対してRPCエラー応答※が送信されます。
- 注※
-
RPCエラー応答には,EERPCER_TIMED_OUT,EERPCER_NO_BUFS_AT_SERVER,およびEERPCER_TRNCHK_EXTENDがあります。どのRPCエラー応答が送信されるかは,RPC関連定義のrpc_reply_tp1mode_downオペランドの指定値によって異なります。