WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

トランザクション・モデル

トランザクション・モデルは、メッセージ・フローのトランザクションを使用して、特定のタスクおよび結果を実行する方法について説明します。

メッセージ・フローは、以下の要素から構成します。

以下のステップは、メッセージ・フロー・トランザクション内の典型的なイベントのシーケンスを示しています。

  1. メッセージが入力ソース (例えばキュー) から取り出されます。
  2. データが、1 つ以上の外部リソース (例えばデータベース) から読み取りまたは書き込まれます。
  3. メッセージが出力ターゲット (例えばキュー) に送信されます。
  4. システムが静止し、次の入力メッセージを待機します。

イベントのこのシーケンス中、メッセージ・フローがアクセスする外部リソースの数に関係なく、 また出力メッセージを生成するかどうかに関係なく、システムのデータの状態は変化します。

次の図をご覧ください。
	-----x---------x---x-------x-------------x----x-----
	     1         2   3       4             5    6

線は、システム内のデータを時系列で表します。 時点 1 では、メッセージが到着し、 入力ソースから取り出されます。 時点 2、3、4、および 5 では、データが、例えばデータベース表または出力キューなどの外部リソースの更新に使用されます。 この図では、データの状態の変化を x 記号で表します。 時点 6 では、出力メッセージが送信され、システムは非アクティブになります。 これらのイベントの間、データの状態は変化しません。この状態は、図の中で = 記号によって示されています。

システムで障害が発生した場合 (ブローカーが稼働しているコンピューターへの電力が失われた場合など)、障害前に外部リソースの状態に加えられた変更は実施されますが、障害後はそれ以上の変更は実施されません。 この状態は特定の環境では許容できないものです。例えば、当座預金から抵当貸付口座への支払い中にシステム障害が発生した場合、当座預金から支払いは引き出されても、抵当貸付口座への加算が行われないことになってしまうかもしれません。

トランザクション

上記の問題を回避するために、ブローカー、およびブローカーと連携して機能する外部リソース・マネージャーにトランザクション・モデル を導入します。 ブローカーは、 データがメッセージ・フロー内の入力ノードによって受信されるとトランザクションを開始し、そのデータの処理が終了するとトランザクションを完了します。 メッセージ・フロー・トランザクションの詳細については、メッセージ・フローのトランザクションを参照してください。

トランザクション内で処理が進むにつれて追加のデータが記録され、障害時に元の状態を復元できるようにします。 以下の図に、この追加のデータの 状態を示します。
	-----x=========x===x=======x=============x====x-----
	     1         2   3       4             5    6

この図の線は、システム内の追加データを時系列で表します。 時点 1 の時点で、入力データが入力ソース (例えばキュー) から到着します。 時点 1 以前にシステムには追加データはありません。この状態は、図の中で - 記号で示されています。 時点 1 の後、状態は、データが入力ソースから受信され、必要な場合に復元できる状態であることを表します。 時点 2、3、4、および 5 では、データが、 データベースまたはファイルなどの外部リソースの更新に使用されます。 追加データの状態が再度変化し、必要な場合はこれらの外部リソースに対する変更を元に戻せるようになります。 時点 6 で出力メッセージが送信されてシステムが非アクティブになり、システム中の追加データは存在しなくなります。

これらのイベントの間、追加データの状態は変化しません。この状態は = 記号で示されています。 時点 1 から時点 6 までの間に障害が発生した場合は、追加データを使用して外部リソースが保持するデータの元の状態が復元されます。 したがって、 実際にはどの出力データも出力ターゲットに書き込まれず、どの外部リソースも更新されず、入力データは入力ソースから受信されません。 障害が発生しなかった場合は、 時点 6 で変更内容が永続的なものとなります (その後に障害が発生して取り消し操作が実行されても変更内容は元に戻されなくなります)。

この操作モードを整合トランザクション・モードといいます。 トランザクションの正常終了をコミットといいます。 異常終了をロールバックといいます。

非整合補助トランザクション

整合トランザクション操作モードの重要な機能は、障害がいつどこで発生するかにかかわらず、特定の入力メッセージに関連した外部リソースに対する変更がすべて行われるか一切行われないかのいずれかになることです。 しかし、以下の例で示されているように、この動作は常に適切とは限りません。

メッセージ・フローにこのような要件がある場合、1 つ以上のリソースを別個の補助トランザクション中で変更するようにメッセージ・フローを構成できます。 すべてのリソース・マネージャーがこのタイプのトランザクションをサポートするわけではありません。

リソースの場合、補助トランザクションは自動的に開始されます。例えば、各データベース接続は、そのデータベースに固有のトランザクションを開始し、そのトランザクションに加えられた更新をすべてコミットまたはロールバックすることができます。

補助トランザクションの動作は、以下の図に示されています。
MAIN -----x=========x===x=======x=============x====x-----
          1         2   4       5             8    9

1st AUX --------------x======x========x------
                      3      6        7

MAIN の線はメイン・トランザクションを表します。このトランザクションには、必要な場合に元の状態に復元するために記録されている追加のデータが含まれます。 1st AUX の線は補助トランザクションを表します。時点 3 で外部リソースが更新され、時点 6 でも再度行われます。時点 7 では、メッセージ・フローは、補助トランザクションで実行する必要があるすべての変更が完了したと判断し、変更内容をコミットします。

時点 7 より前にメッセージ・フローで障害が発生した場合、トランザクションは両方ともロールバックされるため、システムの状態は変更されません。 時点 7 より後かつ時点 9 より前に障害が発生した場合は、補助トランザクションが既にコミットされています。 しかし、メイン・トランザクションはロールバックされます。 時点 9 まで障害が発生しなかった場合は、トランザクションは両方ともコミットされます。

データベース補助トランザクション

複数の補助トランザクションを使用し、コミットまたはロールバックできる多数の更新をデータベース表に加えることができます。 その後、さらに同じデータベース表や別のデータベース表を変更してから、 それらの変更内容をコミットまたはロールバックできます。

使用する各データベースにはそれぞれ独自の補助トランザクションがあるため、別のデータベース・インスタンスに属する (データ・ソース名が異なる) 表をメッセージ・フローが更新する場合には、データベースごとに 1 つの補助トランザクションが存在します。 オプションで、これらの補助トランザクションを個別にコミットまたはロールバックすることもできます。 メッセージ・フローが完了したときに (上記の例では時点 9)、コミットもロールバックもされていない更新はすべて、処理が成功したか失敗したかに応じてブローカーによって自動的にコミットまたはロールバックされます。

補助データベース・トランザクションのコミットとロールバックには、ESQL COMMIT ステートメントと ROLLBACK ステートメントを使用します。 メイン・トランザクション外の操作は、個々のデータベース・ステートメント (INSERT ステートメントや UPDATE ステートメントなど) に UNCOORDINATED キーワードを指定することによって行います。

キュー補助トランザクション

すべてのキューイング・システムが上記のセクションのデータベースの機能を持つわけではありません。 WebSphere® MQ では、キューに対する個々の各非整合読み取りまたは書き込み操作は暗黙のうちにコミット・アクションが行われます。 そのため、2 つのメッセージを挿入してから両方のコミットまたは両方のロールバックを決定することはできません。 このように、COMMIT ステートメントおよび ROLLBACK ステートメントはデータベースでのみ機能します。

ノード

以前のセクションはメッセージ・フローについてのもので、ノードについては言及していません。 メッセージ・フローをノードに分割する方法は、トランザクションには影響しません。 データベースに対する操作の場合、無制限の数のノードが、メイン・トランザクションおよび無制限の数の補助トランザクションに対する更新を、何の制限もなく実行できます。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:45:29


概念トピック概念トピック | バージョン 8.0.0.5 | ac07010_