3.1.8 サービス関数異常時のRPC応答メッセージ送信
同期応答型RPCまたは非同期応答型RPCの場合,トランザクション処理結果に従ってRPC応答メッセージを送信できます。また,サービス関数の処理中に障害(スレッドダウン)が発生した場合に,RPC応答メッセージの送信をERRTRN3の終了時まで抑止できます。
- 〈この項の構成〉
(1) ERRTRN3によるRPC応答メッセージ送信
通常の応答型RPCでは,RPC受信したサービストランザクション起動時のサービス関数の引数として指定した応答データ格納領域(out)にUAPが応答データを格納します。格納された応答データを,サービス関数終了時にRPC応答メッセージとして送信します。
サービストランザクションで障害(スレッドダウン)発生時,ERRTRN3でRPC応答送信をするかどうかを,RPC関連定義のrpc_reply_errtrn3で指定できます。
RPC応答メッセージの送信をERRTRN3の終了時まで抑止する場合は,ERRTRN3によるRPC応答メッセージ送信機能を使用します。この機能を使用すると,RPC応答メッセージの送信をERRTRN3の終了時まで抑止し,RPC送信元にUAPが障害要因を連絡できます。この機能を使用するには,次のように定義を指定する必要があります。
-
RPC関連定義のrpc_reply_errtrn3オペランドにYを指定
-
ユーザサービス関連定義のerrtrn3オペランドを指定
rpc_reply_errtrn3に「Y」を指定した場合,サービストランザクション実行中のスレッドダウンを検知すると,ERRTRN3サービス終了時にそのサービストランザクションの応答送信をします。この応答送信は,ERRTRN3サービスで作成したRPC応答メッセージを使用します。
RPC応答メッセージは,ERRTRN3トランザクションインタフェース情報の応答(out)およびサービス関数の応答の長さ(out_len)に設定してください。
なお,サービストランザクション起動時のサービス関数とERRTRN3サービス関数のデータは,ユーザが引き継ぐ必要があります。
ただし,そのトランザクションが,リモートAPI機能(rap)による自サービスグループに対する代理実行要求の場合は,この機能を使用できません。ERRTRN3によるRPC応答メッセージ送信処理の流れを次の図に示します。
|
この機能は次の動作条件がすべて満たされた場合に動作します。
-
rpc_reply_errtrn3オペランドに「Y」を設定している。
-
サービストランザクション(MN)の処理中にスレッドダウンし,ERRTRN3起動事象が発生する。
-
ルートトランザクションブランチで発生する。
-
同期応答型RPCまたは非同期応答型RPCの応答送信をする。
(2) 障害時処理
サービストランザクションの異常終了検知からERRTRN3起動までの間にプロセスダウンが発生した場合,TP1/EEでの再開始時に該当するクライアントUAP(RPC要求元)に対して,RPCエラー応答を送信します。この場合,RPC応答メッセージは返信できません。クライアントUAP(RPC要求元)には,次のエラー要因を返します。
-
EERPCER_TIMED_OUT
-
EERPCER_TRNCHK_EXTEND
-
EERPCER_NO_BUFS_AT_SERVER
エラー要因についてはrpc_reply_tp1mode_downオペランドの設定値によって変わります。
なお,ERRTRN3内でスレッドダウンまたはプロセスダウンが発生した場合は,該当するクライアントUAP(RPC要求元)に対して,上記のRPCエラー応答を返信します。
ERRTRN3で応答送信に失敗した場合は,KFSB50396-Eメッセージを出力して処理を継続します。
また,ERRTRN3サービスは必ずユーザサービス関連定義(errtrn3オペランド)に設定する必要があります。
この機能使用時にerrtrn3オペランドの設定がない場合には,定義不正でTP1/EEプロセスの起動に失敗します。