Ein Nachrichtenfluss, der Interaktionen mit einer externen Datenbank oder anderen wiederherstellbaren Ressourcen einschließt, kann so konfiguriert werden, dass seine gesamte Verarbeitung innerhalb einer Transaktion koordiniert wird. Durch diese Koordination wird sichergestellt, dass die gesamte Verarbeitung entweder erfolgreich oder überhaupt nicht abgeschlossen wird. Die Transaktion wird festgeschrieben (wenn die gesamte Verarbeitung erfolgreich ist) oder zurückgegeben (wenn mindestens ein Teil der Verarbeitung nicht erfolgreich ist). Dadurch können alle betroffenen Ressourcen (Warteschlangen, Datenbanken usw.) einen durchgängigen Zustand beibehalten, und die Datenintegrität ist gewahrt.
Zur Konfiguration eines koordinierten Nachrichtenflusses müssen Sie die Eigenschaft Coordinated (Koordiniert) des Nachrichtenflusses festlegen.
Für einige Empfangsknoten (z. B. MQEmpfangsknoten, oder SCADAEmpfangsknoten) kann die Eigenschaft Transaktionsmodus im Nachrichtenfluss auf Automatisch gesetzt werden. Dadurch werden Nachrichten ein Teil der globalen Transaktion, und der Nachrichtenfluss wird als transaktionsorientierter Nachrichtenfluss (wenn die Nachricht persistent ist) bzw. als nicht koordinierter Nachrichtenfluss (wenn die Eingabenachricht nicht persistent ist) gekennzeichnet. Wenn der Nachrichtenfluss durch den Empfangsknoten als transaktionsorientiert gekennzeichnet wurde, werden die nachfolgenden Knoten im Nachrichtenfluss, durch die die Eigenschaft 'Transaktionsmodus' auf Automatisch gesetzt wurde, in die globale Transaktion eingeschlossen.
Die Transaktionskoordination von Nachrichtenflüssen wird auf verteilten Plattformen von WebSphere MQ und auf z/OS-Systemen von RRS bereitgestellt. Nachrichtenflüsse werden unter z/OS immer global koordiniert, unabhängig davon, ob die Eigenschaft Coordinated (Koordiniert) des Nachrichtenflusses aktiviert oder inaktiviert ist.
Bei nicht koordinierten Nachrichtenflüssen wurde die Eigenschaft Coordinated (Koordiniert) nicht festgelegt. Aktualisierungen an Ressourcen, die von einem nicht koordinierten Nachrichtenfluss verwendet werden, werden von den verschiedenen Ressourcenmanagern verwaltet. Einige Ressourcenmanager (z. B. von WebSphere MQSeries) ermöglichen nicht transaktionsorientierte Aktualisierungen oder Aktualisierungen als Teil einer ressourcenspezifischen Transaktion. Andere Ressourcenmanager, wie beispielsweise Datenbankmanager, verwenden immer eine ressourcenspezifische Transaktion. Eine ressourcenspezifische Transaktion beschränkt sich auf Ressourcen, die einem einzelnen Ressourcenmanager zugeordnet sind, beispielsweise einen Datenbank- oder Warteschlangenmanager.
Ressourcenspezifische Transaktionen werden normalerweise nur dann verwendet, wenn in einem Nachrichtenfluss nur ein Typ einer wiederherstellbaren Ressource verwendet wird. (Ein Beispiel dafür ist ein Nachrichtenfluss, der einen MQEmpfangsknoten und einen MQSendeknoten enthält, der jedoch nicht auf Datenbanken zugreift.) Ressourcenspezifische Transaktionen sollten nicht verwendet werden, wenn mehrere Ressourcen verwendet werden und die Datenintegrität verwaltet werden muss.
Aktualisierungen einer Ressource, auf die nicht transaktionsorientiert zugegriffen wird, werden sofort festgeschrieben. Durch einen MQEmpfangsknoten, der als nicht transaktionsorientierter Knoten konfiguriert wurde, werden Nachrichten sofort aus der Warteschlange entfernt, und die Nachrichten gehen beim Fehlschlagen des Nachrichtenflusses verloren.
Je nach der Persistenz der Eingabenachricht können einige Empfangsknoten (z. B. MQEmpfangsknoten, oder SCADAEmpfangsknoten) Teil einer Transaktion sein, indem für den Transaktionsmodus Automatisch festgelegt wird. Nachrichten werden Teil der Transaktion, und der Nachrichtenfluss wird bei einer persistenten Eingabenachricht als transaktionsorientiert bzw. bei einer nicht persistenten Eingabenachricht als nicht transaktionsorientiert gekennzeichnet.
Das Beispielprogramm 'Error Handler' veranschaulicht den Einsatz von global koordinierten Transaktionen und zeigt, wie der Nachrichtenfluss jeweils anders reagiert, je nachdem, ob die Datenbankaktualisierungen koordiniert werden (Hauptnachrichtenfluss) oder nicht (Fehlernachrichtenfluss).