外部データベースまたはその他のリカバリー可能リソースとの対話を含むメッセージ・フローは、そのすべての処理が 1 つのグローバルなトランザクション内で整合されるように構成することができます。 この整合によって、すべての処理が正常に完了されるか、処理がまったく実行されないかのいずれかになります。 トランザクションは、コミット (すべての処理が成功した場合) またはロールバック (少なくとも処理の一部が成功しない場合) されます。 つまり、影響を受けるすべてのリソース (キュー、データベースなど) は、整合した状態を維持し、データ整合性が保たれることになります。
整合済みとしてメッセージ・フローを構成するには、メッセージ・フローで「整合」プロパティーを設定します。
MQInput、または SCADA ノードなど、一部の入力ノードでは、フローのノードの「トランザクション・モード」プロパティーを「自動」に設定できます。これは、メッセージがグローバル・トランザクションの一部となり、入力メッセージが持続する場合にはフローがトランザクションとして、持続しない場合には非整合としてマークされることを意味します。 入力ノードによってフローがトランザクションとマークされた場合、トランザクション・モード・プロパティーを「自動」に設定するフローの後続のノードはグローバル・トランザクションに組み込まれます。
メッセージ・フローのトランザクション調整は、分散プラットフォームでは WebSphere MQ によって、z/OS システムでは RRS によって提供されます。 z/OS の場合、メッセージ・フローは、その「整合」プロパティーが整合として指定されているかどうかに関係なく、常にグローバルに整合されます。
非整合フローは、「整合」プロパティーが設定されていないフローです。 非整合フローによって使用されるリソースに対する更新は、個々のリソース・マネージャーによって管理されます。 リソース・マネージャーの中には、更新を非トランザクションとして、またはリソース固有のトランザクションの一部として行えるものがあります (例えば WebSphere MQSeries など)。 また、常にリソース固有のトランザクションを使用するリソース・マネージャーもあります (例えばデータベース・マネージャー)。 リソース固有のトランザクションは、単一のリソース・マネージャー (例えばデータベース・マネージャーまたはキュー・マネージャーなど) によって所有されるリソースにその有効範囲が限られています。
リソース固有のトランザクションは通常、フロー内で 1 つのタイプのリカバリー可能リソースしか使用されていないような場合にのみ使用されます。 (MQInput および MQOutput ノードが含まれているものの、どのデータベースにもアクセスしないようなフローはその一例です。) 複数のリソースが存在し、データ保全性を維持しなければならない場合には、リソース固有のトランザクションを使用すべきではありません。
非トランザクションとしてアクセスされるリソースに対する更新は、即時にコミットされます。 非トランザクションとなるように構成されている MQInput ノードは、キューからメッセージを即時に除去し、フローが失敗するとメッセージは失われます。
一部の入力ノード (例えば MQInput、または SCADA ノード) は、トランザクション・モードを「自動」に設定することにより、トランザクションの一部となることができます (入力メッセージの持続性に依存する)。 入力メッセージが持続的なものである場合、メッセージはトランザクションの一部となり、フローはトランザクションとしてマークされます。メッセージが持続的なものでない場合は、非トランザクションとしてマークされます。
Error Handler サンプルは、 グローバルに整合されたトランザクションの使用法を示すとともに、 データベース更新が整合された場合のメッセージ・フロー (メイン・フロー) と、 整合されない場合のメッセージ・フロー (エラー・フロー) の相違を示します。