Freigeben über


Verwendungsszenarien für atomarische Transaktionen

In den folgenden Szenarien wird die Verwendung atomarischer Transaktionen beschrieben.

Szenario 1: Eine atomice Transaktion mit COM+ ServicedComponent

Die folgende Orchestrierung zeigt, wie Die RetryTransactionException mit atomaren Transaktionen verwendet wird. Ausnahmehandler dürfen zwar nicht direkt in atomarischen Bereichen enthalten sein, der Bereich kann jedoch einen nicht transaktionalen Bereich mit einem Ausnahmehandler enthalten. Der ServicedComponent wird in dieselbe DTC-Transaktion aufgenommen, und jede von der Komponente ausgelöste Ausnahme wird abgefangen und als RetryTransactionException erneut ausgelöst. (Hierbei wird vorausgesetzt, dass die Retry-Eigenschaft für den atomaren Bereich auf True festgelegt ist.)

Beachten Sie, dass die Orchestrierung angehalten und die Aktion in der MessageAssignment-Form zurückgesetzt worden wäre, auch wenn die RetryTransactionException nicht ausgelöst wurde. Dieses Muster verbessert jedoch die Stabilität von Anwendungen, in denen die Widerholungen automatisch ausgeführt werden.

Atomarische Transaktion mit COM+-ServicedComponent

Eine atomare Transaktion mit COM+ ServicedComponent

Szenario 2: Verwenden von Transacted Adapters mit Atomic-Transaktionen

Anhand folgender Orchestrierung wird dargestellt, wie atomarische Transaktionen mit dem SQL-Adapter verwendet werden. Die gesamte Orchestrierung ist mit einzelnen atomaren Transaktionen für die beiden logischen Aufgaben als lange ausgeführt gekennzeichnet: Einfügen eines neuen Kunden und Einfügen von Auftragsdetails für den Kunden.

Wenn Fehler beim Einfügen der Bestellinformationen auftreten, soll das Einfügen des Kundens rückgängig gemacht werden. Im Beispiel werden die Datenbankaufgaben vom SQL-Adapter ausgeführt. Wie bereits erwähnt, wird der einer atomarischen Transaktion zugeordnete Bereich abgeschlossen, wenn die Nachricht an die MessageBox-Datenbank gesendet wird. Dies bedeutet, dass nach dem erfolgreichen Senden der Nachricht in den Bereichen Scope_InsertCustomer und Scope_InsertOrder durch die Messaging-Engine beide Bereiche zugesichert werden. Der SQL-Adapter erstellte eine neue Transaktion für das eigentliche Einfügen des Kundens bzw. der Bestellung.

Die Ports verfügen über die Eigenschaft Übermittlungsbenachrichtigung, mit der überprüft werden kann, dass die Nachricht erfolgreich über den Sendeport gesendet wurde. Wenn die Eigenschaft Übermittlungsbenachrichtigung auf "Übertragen" festgelegt ist, wird vor dem transaktionalen Commitpunkt des Sendevorgangs ein Empfangsabonnement eingefügt. Im Fall von atomarischen Bereichen wird das Empfangsabonnement jedoch in den einschließenden übergeordneten Bereich eingefügt.

Falls ein Fehler bei der SQL-Transaktion InsertOrder auftritt, wird eine negative Bestätigung zurückgesendet und ein Commit für Scope_InsertOrder ausgeführt. Nachdem die festgelegte Anzahl von Wiederholungen vom Sendeport ausgeführt wurde, wird die Ausnahme DeliveryFailureException ausgelöst. Diese Ausnahme wird vom Standardausnahmehandler erfasst, der den standardmäßigen Kompensierungsprozess ausführt. Hierdurch werden die Kompensationshandler aufgerufen, die Scope_InsertCustomer und Scope_InsertOrder zugeordnet sind. Dies löst den Rückgängig-Vorgang für das Einfügen der Kundeninformationen aus.

Hinweis

Wenn Sie zwei Bereiche in einem lang ausgeführten Bereich verschachteln und die Form Kompensieren aus dem Ausnahmehandler für den lang ausgeführten Bereich mit der lang ausgeführten Transaktion als Ziel aufrufen, erzielen Sie ebenfalls das oben beschriebene Verhalten. Die gesamte Orchestrierung kann hierbei nicht als atomarisch gekennzeichnet werden, da geschachtelte Transaktionen in atomarischen Orchestrierungen nicht zulässig sind.

Transaktive Adapter mit atomarischen Transaktionen

Transaktionsadapter mit atomaren Transaktionen