Hitachi

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


2.2.2 リモートプロシジャコールの形態と同期点の関係

トランザクションとして稼働しているクライアントUAPからトランザクショナルRPCで呼ばれたサーバUAPはトランザクションとして稼働します。各トランザクションブランチは,一つのグローバルトランザクションとして同期を取れます。したがって,各サーバUAPのプロセスは,処理終了後,ee_rpc_call関数を呼び出したUAPにリターンしても,ルートトランザクションブランチに戻って同期点処理が完了するまでは,次のサービス要求を受け付けられません。また,サーバUAPで確保している資源も解放されません。これは非同期応答型RPC,非応答型RPCの場合でも同様です。

このように,UAPの処理ではRPCのトランザクション制御で,複数のUAPで同期が取れます。

RPCのトランザクション制御は,TP1/EE同士,または,TP1/EEとTP1/Server Baseとの間で実行できます。詳細については,「2.1.11 トランザクショナルRPC」またはマニュアル「TP1/Server Base Enterprise Option 使用の手引」のTP1/Server Baseとのトランザクション連携に関する説明を参照してください。

クライアントUAPの同期点処理が完了する前に,サーバUAPのプロセスでほかのサービス要求を処理できる場合があります。これをトランザクションの最適化といいます。トランザクションの最適化については,「2.2.4 トランザクションの最適化」を参照してください。

〈この項の構成〉

(1) リモートプロシジャコールと同期点の関係

同期応答型RPCでのRPC応答メッセージの送信タイミングは,サーバUAPがルートトランザクションブランチかどうかで異なります。

リモートプロシジャコールと同期点の関係を次の図に示します。

図2‒19 リモートプロシジャコールと同期点の関係

[図データ]

(2) 同期応答型RPCと同期点の関係

同期応答型RPCのトランザクション処理の場合は,ルートトランザクションブランチに処理結果が戻って,同期点取得処理を終えた時点でトランザクションの終了となります。

トランザクションを最適化する条件がそろっている場合,サーバUAPのプロセスは処理が終了した時点で,次のサービス要求を受け付けられます。

同期応答型RPCと同期点の関係を次の図に示します。

図2‒20 同期応答型RPCと同期点の関係

[図データ]

(3) 非同期応答型RPCと同期点の関係

非同期応答型RPCのトランザクション処理の場合は,クライアントUAPで同期点処理を終えた時点でRPCの処理を終了とします。同期点処理後にサーバUAPから応答が返ってきても,ee_rpc_call関数を呼び出したUAPでは受信できません。

非同期応答型RPCと同期点の関係を次の図に示します。

図2‒21 非同期応答型RPCと同期点の関係

[図データ]

(4) 非応答型RPCと同期点の関係

非応答型RPCのトランザクション処理の場合は,クライアントUAPの同期点取得でサーバUAPの処理終了を待って,そのあとで同期点取得処理をします。

非応答型RPCと同期点の関係を次の図に示します。

図2‒22 非応答型RPCと同期点の関係

[図データ]

(5) リモートプロシジャコールのエラーリターン値と同期点

ee_rpc_call関数がエラーリターンしても,トランザクションの同期点がコミットとなる場合があります。

また,リターン値によっては,必ずトランザクションをロールバックさせなければならない場合があります。この場合は,ee_trn_chained_rollback関数またはee_trn_rollback_mark関数【CBLEETRN('ROLLMARK')】を呼び出してロールバックさせてください。