3.1.5 UAPとトランザクションの関係
UAPの処理をトランザクションにするかどうかを,事前に決められます。トランザクションとして処理するUAPを,トランザクション属性のUAPといいます。グローバルトランザクションのトランザクションブランチとなるUAPには,必ずトランザクション属性を指定しておいてください。トランザクション属性は,ユーザサービス定義のatomic_updateオペランドで指定します。ファイルの情報を更新するUAPをトランザクション処理として,演算処理だけのUAPはトランザクション処理としない指定をしておくと,トランザクション処理に掛かるシステムの負担を軽くできます。
(1) SUP,SPPとトランザクションの関係
トランザクション属性のSPPは,トランザクションとして処理しているプロセスからRPCで呼び出されると,自動的にトランザクションブランチになります。
ルートトランザクションブランチやトランザクションブランチから呼び出されても,トランザクション属性でないSPPは,グローバルトランザクションに含まれません。このとき,トランザクション属性でないSPPがトランザクション属性のSPPを呼び出したとしても,呼び出されたSPPはトランザクションブランチにはなりません。
SUP,SPPのグローバルトランザクションを次の図に示します。
SUP またはSPPの処理をトランザクションにする場合は,dc_trn_begin関数を呼び出して,トランザクションの開始を宣言します。同期点を取得する場合も,SUPまたはSPPからdc_trn_××××_commit関数またはdc_trn_××××_rollback関数を呼び出します(××××は,同期点を取得したあとに,それまでとは別の新しいトランザクションを開始するかどうかで異なります)。トランザクションの開始と同期点を取得する関数は,ルートトランザクションブランチからだけ呼び出せます。
(2) MHPとトランザクションの関係
MHPのサービスを呼び出した時点で,トランザクションの処理が開始します。MHPでは,dc_trn_begin関数は使えません。MHPからSPPへサービスを要求する場合,MHPがルートトランザクションブランチとなります。MHPのトランザクションは,MHPが終了するかまたは同期点を取得する関数(dc_mcf_commit関数,dc_mcf_rollback関数)を呼び出すと決着します。MHPの処理の中で同期点を取得した場合は,同期点取得以降の処理は,それまでとは別の,新しいトランザクションの処理となります。なお,非トランザクション属性のMHPも作成できます。この場合,MHPで同期点は取得できません。
MHPのグローバルトランザクションを次の図に示します。