Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option 使用の手引


3.4.5 DBキュー機能のトランザクションの流れ(AP間通信)

DBキュー機能を使用したAP間通信でのメッセージ送受信トランザクションの流れについて説明します。

〈この項の構成〉

(1) メッセージ書き込みから読み出しまでの処理の流れ(同一システム内でのAP間通信)

DBキューを使用した同一システム内でのAP間通信について,メッセージ書き込みから読み出しまでの処理の流れを次に示します。

図3‒30 メッセージ書き込みから読み出しまでの処理の流れ(同一システム内でのAP間通信)

[図データ]

  1. サービストランザクション(メッセージ書き込み要求を行うトランザクション)で起動されたUAP1で,ee_dbq_msgput関数を呼び出してメッセージの書き込み処理を要求します。

  2. サービストランザクションのコミットを契機に,DBキューにメッセージを書き込みます。

  3. メッセージ読み出しトランザクションの開始時にDBキューからメッセージを読み出します。

  4. メッセージ読み出しトランザクションでUAP2を起動して,DBキューから読み出したメッセージをUAP2に渡します。

  5. メッセージ読み出しトランザクションのコミット後,未読み出しメッセージがなくなるまでメッセージ読み出しトランザクションを繰り返し起動します。

(2) メッセージ書き込みから読み出しまでの処理の流れ(他システムとのAP間通信)

DBキューを使用した他システムとのAP間通信について,メッセージ書き込みから読み出しまでの処理の流れを次に示します。

図3‒31 メッセージ書き込みから読み出しまでの処理の流れ(他システムとのAP間通信)

[図データ]

  1. システムAでは,サービストランザクション(メッセージ書き込み要求を行うトランザクション)で起動されたUAP1で,ee_dbq_msgput関数を呼び出してメッセージの書き込み処理を要求します。

  2. システムAでは,サービストランザクションのコミットを契機に,DBキューにメッセージを書き込みます。

  3. システムAからシステムBに,イベントを送信します。

  4. イベントを受信したシステムBでは,メッセージ読み出しトランザクションの開始時にDBキューからメッセージを読み出します。

  5. システムBでUAP2を起動して,DBキューから読み出したメッセージをUAP2に渡します。

  6. システムBでは,メッセージ読み出しトランザクションのコミット後,未読み出しメッセージがなくなるまでメッセージ読み出しトランザクションを繰り返し起動します。

(3) 読み出したメッセージのロールバックを要求された場合

DBキューからメッセージを読み出したあとに,ユーザからメッセージ読み出しトランザクションのロールバックを要求された場合,TP1/EEでロールバック処理をします。ロールバック後,ロールバックによって読み出しを取り消したメッセージを再度読み出すトランザクションを起動します。

ロールバック後,ロールバックによって読み出しを取り消したメッセージを破棄して次のメッセージから読み出したい場合は,ロールバック時にee_dbq_rbskip関数を呼び出します。

(4) メッセージの読み出し中にスレッドダウンが発生した場合

DBキューからメッセージを読み出している最中にスレッドダウンが発生した場合,回復トランザクションでDBキューの回復処理をします。トランザクション回復後,エラートランザクション(ERRTRN3)を起動して,障害発生を通知します。

メッセージの読み出し中に,スレッドの強制終了を指定したロールバックを要求した場合,スレッドダウンします。ただし,スケジュール停止状態にはならないため,ロールバックによって読み出しを取り消したメッセージを再度DBキューから読み出すトランザクションを起動します。また,同一メッセージを再度読み出すトランザクションとは別に,スレッドダウンによってエラートランザクション(ERRTRN3)を起動します。同一メッセージを再度読み出すトランザクションとエラートランザクションの順序は保証されません。したがって,メッセージの読み出し中にスケジュール停止状態などにしたい場合は,エラートランザクション(ERRTRN3)起動後ではなく,ロールバックを要求する前に行ってください。

(5) メッセージの書き込み中にDB障害が発生した場合

DBキューにメッセージを書き込んでいる最中にDB障害が発生した場合,メッセージ書き込み要求を行ったトランザクションをロールバックしてからエラートランザクション(ERRTRNR)を起動して,障害発生を通知します。

(6) メッセージの読み出し中にDB障害が発生した場合

DBキューからメッセージを読み出している最中にDB障害が発生した場合,メッセージの読み出しを停止させ,トランザクションをロールバックします。ロールバックしたあとにエラートランザクション(ERRTRNR)を起動して,障害発生を通知します。

その後,ユーザからメッセージ読み出し停止解除を要求された場合,読み出し停止状態を解除して,メッセージ読み出しトランザクションを起動します。