2.3.1 クライアント/サーバ形態の通信のトランザクション
OpenTP1では,RPCを使用して複数のUAPプロセスにわたっている処理を,1件のトランザクション処理にできます。このようなトランザクションをグローバルトランザクションといいます。このグローバルトランザクションによって,クライアント/サーバ形態のトランザクションができるようになります。
(1) トランザクションの開始と同期点の取得
クライアント/サーバ形態の通信でトランザクションを制御するときは,トランザクションの開始と同期点の取得をUAPで明示します。
トランザクションを開始するときは,次に示す関数を呼び出します。
同期点を取得するときは,次に示す関数を呼び出します。
トランザクションを開始した時点で,クライアントUAPはルートトランザクションブランチになります。トランザクションの同期点取得(コミット)は,トランザクションを開始したルートトランザクションブランチで呼び出します。
トランザクションを開始したあとに,そのグローバルトランザクションの中で新しいトランザクションは開始できません。
トランザクションとして実行中のUAPから要求されたサービスは,要求された時点ですでにトランザクションとして実行しています。このとき,要求されたサービスの処理からdc_trn_begin関数は呼び出せません。
(2) トランザクションを制御する関数を使えるUAP
トランザクションの開始,または同期点を取得する関数を呼び出せるのは,SUPとSPPです。MHPのトランザクション処理はOpenTP1で自動的に制御しているので,MHPからトランザクションを制御する関数は呼び出せません。また,MHPからdc_rpc_call関数でサービスを要求されるSPPでも,トランザクションを制御する関数は呼び出せません。
オフラインの業務をするUAPでは,トランザクションを制御する関数を使えません。
OpenTP1クライアント機能のUAP(CUP)は,TP1/Clientのライブラリにあるトランザクション制御の関数を使います。