Auf Englisch lesen

Freigeben über


Bereiche

Ein Bereich ist ein Framework für das Gruppieren von Aktionen. Bereiche werden hauptsächlich für die Transaktionsausführung und Ausnahmebehandlung verwendet.

Ein Bereich enthält mindestens einen Block. Er verfügt über einen Textteil, und es kann optional eine beliebige Anzahl von Blöcken für die Ausnahmebehandlung angefügt werden. Außerdem kann er je nach Blocktyp auch einen optionalen Kompensierungsblock enthalten. Einige Bereiche werden ausschließlich für die Ausnahmebehandlung verwendet, sodass keine Kompensierung erforderlich ist. Andere Bereiche sind explizit transaktional und verfügen immer über einen Standardkompensierungshandler sowie optional über einen von Ihnen erstellten Kompensierungshandler. Ein Transaktionsbereich enthält außerdem einen Standardausnahmehandler sowie eine Reihe zusätzlicher Ausnahmehandler, die Sie für den Bereich erstellen.

Synchronisierte Bereiche

Sie können angeben, dass Bereiche synchronisiert oder nicht synchronisiert sind. Durch das Synchronisieren eines Bereichs stellen Sie sicher, dass freigegebene Daten, auf die in diesem Bereich zugegriffen wird, bei der Orchestrierung nicht durch mehrere parallele Aktionen geschrieben werden und dass sie nicht geschrieben werden, während eine andere Aktion diese Daten liest.

Atomarische Transaktionsbereiche sind immer synchronisiert. Alle Aktionen in einem synchronisierten Bereich gelten als synchronisiert. Dies gilt auch für sämtliche Aktionen in den enthaltenen Ausnahmehandlern. Aktionen im Kompensierungshandler eines Transaktionsbereichs werden nicht synchronisiert.

Achtung

Beachten Sie, dass trotzdem ein Deadlock auftreten kann, wenn Sie den Prozess nicht sorgfältig entwerfen. Beispiel: Zwei Verzweigungen greifen bei der Orchestrierung A zeitgleich auf dieselbe Nachricht zu, eine für das Senden der Nachricht und die andere für deren Empfang. Daher benötigen beide einen synchronisierten Bereich. Eine zweite Orchestrierung empfängt die Nachricht und sendet sie zurück. Es ist möglich, dass die sendende Verzweigung in Orchestrierung A ihre Sperre bereits vor der empfangenden Verzweigung erhält. In diesem Fall tritt ein Deadlock auf.

Verschachteln von Bereichen

Sie können Bereichs-Shapes in andere Bereichs-Shapes schachteln. Für das Schachteln von Bereichen gelten folgende Regeln:

  • Transaktionale und/oder synchronisierte Bereiche können nicht in synchronisierten Bereichen geschachtelt werden. Dies gilt auch für Ausnahmehandler synchronisierter Bereiche.

  • In atomarischen Transaktionsbereichen können keine anderen Transaktionsbereiche geschachtelt werden.

  • Transaktionsbereiche können nicht in nicht transaktionalen Bereichen oder Orchestrierungen geschachtelt werden.

  • Sie können Bereiche bis zu einer Tiefe von 21 Ebenen schachteln.

  • Aufruforchestrierungs-Shapes können in Bereiche eingeschlossen werden, aber die aufgerufenen Orchestrierungen werden genauso behandelt wie jede andere geschachtelte Transaktion, und es gelten dieselben Regeln.

  • Startorchestrierungs-Shapes können in Bereiche eingeschlossen werden. Für gestartete Orchestrierungen gelten die Einschränkungen bei der Schachtelung nicht.

Bereichsvariablen

Sie können Variablen wie Nachrichten und Korrelationssätze auf Bereichsebene deklarieren. Sie dürfen jedoch für eine Bereichsvariable nicht denselben Namen wie für eine Orchestrierungsvariable verwenden, das Ausblenden des Namens ist nicht erlaubt.

Weitere Informationen

Verwenden von Transaktionen und Behandeln von Ausnahmen
Atomarische Transaktionen