2.6.8 連鎖モード連携機能
トランザクション処理の同期点取得には,一つのトランザクションの終了後,同期点を取得して次のトランザクションを続けて起動する連鎖モードのコミット,ロールバックと,トランザクションの終了で同期点を取得したあと,新たなトランザクションを起動しない非連鎖モードのコミット,ロールバックがあります。
連鎖モード連携機能とは,読み出したメッセージを連鎖モードのコミット,ロールバックと連携して決着するか,または連携しないでUAP終了で決着するかを指定する機能です。サービス属性定義のservice_attrオペランドの-gオプションによって指定できます。
- <この項の構成>
- (1) 連鎖モード連携する場合
- (2) 連鎖モード連携しない場合
(1) 連鎖モード連携する場合
連鎖モード連携機能を使用すると,連鎖モードのコミット,ロールバックと連携して読み出したメッセージを決着させます。
- ■連鎖モードのコミットで決着した場合
- トランザクションが連鎖モードのコミットによって決着すると,読み出したメッセージは読み出し済みになります。
- ■連鎖モードのロールバックで決着した場合
- トランザクションが連鎖モードのロールバックによって決着すると,メッセージはリトライまたは破棄となります。
- トランザクションがロールバックしたときの再起動トランザクションは,読み出したメッセージとは関係のないトランザクションとなります。再起動トランザクションでは,メッセージの読み出し,およびメッセージの差し戻しはできません。また,再起動トランザクションで連鎖モードのコミットまたはロールバックによってトランザクションが決着しても,メッセージには影響しません。
- ■連鎖モードのコミット,ロールバックを要求しなかった場合
- 連鎖モードのコミット,ロールバックを要求しなかった場合は,UAPがリターンした時点のトランザクションの決着によって,メッセージは読み出し済み,リトライ,または破棄となります。
連鎖モード連携する場合の処理の流れを次の図に示します。
図2-44 連鎖モード連携する場合の処理の流れ
![[図データ]](figure/zu020690.gif)
- 説明
- メッセージ1のトランザクションが開始されたあとも,トランザクションが決着するまでの間,メッセージの読み出しおよび差し戻しができます。
- メッセージ1のトランザクションが,連鎖モードのロールバックによって決着し,リトライが決定したため,残りの処理をメッセージ1とは関係のない再起動トランザクションとします。
- 連鎖モードのロールバックによる再起動トランザクションでは,メッセージの読み出しおよび差し戻しはできません。また,再起動トランザクションが決着した時点では,メッセージ1は読み出し済みになりません。
- 2.でリトライが決定したため,メッセージ1が再度読み出されます。トランザクションがコミットで決着すると,メッセージ1は読み出し済みになります。
(2) 連鎖モード連携しない場合
連鎖モード連携しない場合,つまり,連鎖モードのコミットまたはロールバックによるトランザクションの決着でメッセージを決着しない場合は,UAPがリターンした時点のトランザクションの決着で,メッセージを決着します(読み出し済み,リトライ,または破棄とします)。
連鎖モード連携しない場合は,再起動トランザクションでメッセージの読み出し,およびメッセージの差し戻しができます。連鎖モード連携しない場合の処理の流れを次の図に示します。
図2-45 連鎖モード連携をしない場合の処理の流れ
![[図データ]](figure/zu020700.gif)
- 説明
- 連鎖モード連携しないため,トランザクションがロールバックで決着したあとの再起動トランザクションでもメッセージの読み出し要求,および差し戻し要求ができます。
- メッセージ1は,再起動トランザクションの決着によって読み出し済みになります。
- メッセージ1が読み出し済みになったため,メッセージ2が読み出され,トランザクションが開始されます。