2.8.2 APIの代理実行
図2-46で,APIの代理実行要求受け付けの処理に該当するのは,4.,5.のメッセージ送受信です。
(1) TP1/EEがrapクライアントとして動作する場合の処理
リモートAPI機能を使用するサービスグループに対してee_rpc_call関数を呼び出した場合,常設コネクションを経由して代理実行要求メッセージをrapサーバに送信します。サービスの実行結果は,代理実行応答メッセージとして受信します。
- トランザクショナルRPCの代理実行要求を送信した場合
-
リモートAPI機能を使用するサービスグループに対してトランザクショナルRPC(dc_rpc_call関数のflagsオプションにDCRPC_TPNOTRANを指定しない)を実行した場合,非トランザクショナルRPC(ee_rpc_call関数のflagsオプションにEERPC_TPNOTRANを指定)の代理実行要求として処理されます。
rapクライアントが不正なメッセージを受信した場合,または応答待ちでタイムアウトが発生した場合は,常設コネクションを切断します。
なお,代理実行要求メッセージを送信したあと,応答待ち時間(RPC関連定義のwatch_timeオペランドで指定)以内に代理実行応答メッセージを受信できない場合,ee_rpc_call関数はエラーリターンします。
(2) TP1/EEがrapサーバとして動作する場合の処理
rapサーバでの代理実行要求受け付けは,他サービスグループに対する代理実行要求の受け付けか,自サービスグループに対する代理実行要求の受け付けかによって処理が異なります。
(a) 他サービスグループに対する代理実行要求の受け付け
rap受信スレッドが,rapクライアントからの代理実行要求メッセージを受信します。メッセージを受信したあと,rap制御用処理キューへメッセージの登録要求をします。rap制御用処理キューからメッセージを引き出した処理スレッド(rapトランザクション)は,メッセージの処理を実行する他サービスグループに代理実行要求をします。処理が完了すると,常設コネクションを経由して代理実行応答メッセージをrapクライアントに送信します。
- 同期応答型RPCを使用した代理実行要求の最大応答待ち時間
-
同期応答型RPCを使用した代理実行要求の場合,代理実行要求の最大応答待ち時間はrapクライアント側から継承して,TP1/EE(rapサーバ)が監視します。
- トランザクショナルRPCの代理実行要求を受け付けた場合
-
トランザクショナルRPC(dc_rpc_call関数のflagsオプションにDCRPC_TPNOTRANを指定しない)の代理実行要求を受け付けた場合,TP1/EE(rapサーバ)は,非トランザクショナルRPC(ee_rpc_call関数のflagsオプションにEERPC_TPNOTRANを指定)の代理実行要求として処理します。
- 代理実行要求の処理を同時に実行する処理スレッド数
-
代理実行要求の処理を同時に実行する処理スレッド数の割合が,RPC関連定義のrap_max_server_rateオペランドの指定値を超えた場合は,処理中の代理実行要求が終了してから,新しい代理実行要求を処理します。
(b) 自サービスグループに対する代理実行要求の受け付け
rap受信スレッドが,rapクライアントからの代理実行要求メッセージを受信します。メッセージを受信したあと,該当するサービスのサービス処理キューへメッセージの登録要求をします。
サービス処理キューからメッセージを引き出した処理スレッド(サービストランザクション)は,メッセージの処理を実行します。処理が完了すると,常設コネクションを経由して代理実行応答メッセージをrapクライアントに送信します。
- 同期応答型RPCを使用した代理実行要求の最大応答待ち時間
-
同期応答型RPCを使用した代理実行要求の場合,TP1/EEでは応答待ち時間を監視しません。そのため,応答待ち時間は,rapクライアント側で監視します。
- 指定サービス名が不正,またはサービスが閉塞中の場合
-
代理実行要求のメッセージに指定されたサービス名が不正,またはサービスが閉塞中の場合,エラートランザクション(ERRTRN1およびERRTRN2)を起動しないで,rapクライアントにエラーを返します。
- トランザクショナルRPCの代理実行要求を受け付けた場合
-
トランザクショナルRPC(dc_rpc_call関数のflagsオプションにDCRPC_TPNOTRANを指定しない)の代理実行要求を受け付けた場合,TP1/EE(rapサーバ)は,非トランザクショナルRPC(ee_rpc_call関数のflagsオプションにEERPC_TPNOTRANを指定)の代理実行要求として処理します。
自プロセスで代理実行要求を受け付けてサービスを実行する場合と通常のRPCでサービスを実行する場合との機能差異を次に示します。
-
ダウン時の「トランザクション処理結果に従ったRPC応答メッセージの送信機能(RPC関連定義のrpc_reply_tp1mode_downオペランド)」
自プロセスがプロセスダウンした場合は常設コネクションが切断されるため,rapクライアント側に応答メッセージは返りません。
自プロセスがスレッドダウンした場合は,リターン値EERPCER_TIMED_OUTでエラーリターンします。
-
ERRTRNRによるRPC応答メッセージの送信機能
この機能を有効にしても,応答メッセージ送信の抑止は行いません。この機能を無効にした場合と同じ動作になります。
-
別トランザクションによるRPC同期応答機能
RPC応答メッセージ送信の抑止関数(ee_rpc_reply_suspend関数)を発行した場合,リターン値EERPCER_PROTOでエラーリターンします。