Freigeben über


Konfigurieren von Transaktionen

Das Transaktionsattribute ist eine deklarative Eigenschaft, die Transaktionen für den Komponentenentwickler automatisch verwaltet. Durch Festlegen dieses Attributs entfällt die Notwendigkeit, explizite Transaktionssteuerelemente in Ihrer Komponente zu verwenden.

COM+ verwendet das Transaktionsattribute der Komponente, um den Typ des Transaktionsschutzes zu bestimmen, der für jedes aktivierte Objekt erforderlich ist. Je nach Anforderung kann ein Objekt die Transaktion des Aufrufers freigeben, eine neue Transaktion erfordern oder ohne Transaktionsschutz arbeiten.

COM+ stellt die folgenden Transaktionsattributewerte bereit:

Deaktiviert

Im Allgemeinen sollten Sie diesen Attributwert nur dann festlegen, wenn Sie sicher sind, dass die Komponente nie auf einen Ressourcen-Manager zugreift. Wenn Sie das Transaktionsattribute deaktivieren, ignoriert COM+ die Transaktionsanforderungen der Komponente bei der Bestimmung der Kontextplatzierung des Objekts. Dadurch kann das Objekt den Kontext (und die Transaktion) des Aufrufers gemeinsam nutzen. Wenn Sie eine COM-Komponente zu COM+ migrieren, müssen Sie das Transaktionsattribute deaktivieren, um das gleiche Transaktionsverhalten wie die nicht konfigurierte COM-Komponente beizubehalten.

Hinweis

Eine nicht konfigurierte Komponente ist eine COM-Komponente, die nicht in einer COM+-Anwendung installiert wurde.

Nicht unterstützt

Wenn Sie diesen Attributwert festlegen, stellt COM+ sicher, dass jedes aus der Komponente erstellte Objekt niemals an einer Transaktion teilnimmt, unabhängig vom transaktionsbasierten status des Aufrufers. Indem Sie diesen Wert deklarieren, stellen Sie sicher, dass ein Objekt weder in der Transaktion des Aufrufers abstimmt noch eine eigene Transaktion starten kann. Nicht unterstützt ist der Standardwert für alle Komponenten.

Unterstützt

Wenn Sie diesen Attributwert festlegen, stellt COM+ sicher, dass jedes aus der Komponente erstellte Objekt an einer Transaktion teilnimmt, sofern vorhanden. Sie deklarieren diesen Wert, wenn Sie möchten, dass ein Objekt in der Transaktion des Aufrufers freigegeben werden soll, ohne dass eine eigene Transaktion erforderlich ist.

Erforderlich

Wenn Sie diesen Attributwert festlegen, stellt COM+ sicher, dass jedes aus der Komponente erstellte Objekt transaktional ist. Wenn COM+ ein Objekt mit der Einstellung Erforderlich aktiviert, wird die transaktionsbezogene status des Aufrufers untersucht. Wenn der Aufrufer über eine Transaktion verfügt, ist das neue Objekt in der aktuellen Transaktion enthalten. Andernfalls beginnt COM+ eine Transaktion, wodurch das neue Objekt zum Stamm der Transaktion wird. Dies ist die bevorzugte Einstellung für eine Komponente, die Ressourcenaktivitäten ausführt, da sie transaktionsschutz für diese Aktivitäten bietet.

Neu erforderlich

Wenn Sie diesen Attributwert festlegen, stellt COM+ sicher, dass alle aus der Komponente erstellten Objekte an einer neuen Transaktion als Stamm der Transaktion teilnehmen müssen, unabhängig vom transaktionsbasierten status des Aufrufers. COM+ initiiert automatisch eine neue Transaktion, die sich von der Transaktion des Aufrufers unterscheidet.

Hinweis

COM+ unterstützt keine geschachtelten Transaktionen. Wenn ein Transaktionsobjekt eine andere Komponente aufruft, die als Neu erforderlich gekennzeichnet ist, erstellt COM+ eine unabhängige Transaktionsgrenze für das neu aktivierte Objekt. Die zweite Transaktion kann sich nicht auf die erste Transaktion auswirken, es sei denn, die erste Transaktion notiert die Ergebnisse der zweiten Transaktion explizit und ändert ihre Abstimmung basierend auf diesen Ergebnissen.

Transaktionsattributeabhängigkeiten

Die folgende Tabelle zeigt die Merkmale der einzelnen COM+-Transaktionsattribute, einschließlich der Auswirkung des Werts auf Transaktionsmerkmale. COM+ erzwingt die JIT-Aktivierung und -Synchronisierung für alle Transaktionskomponenten.

Attributwert Neue Transaktion Transaktion des Clients Transaktionsstamm JIT-Aktivierung Synchronization
Deaktiviert
Nie
Vielleicht
Nie
Optional
Optional
Nicht unterstützt
Nie
Nie
Nie
Optional
Optional
Unterstützt
Nie
Wenn der Client eine Transaktion aufweist
Nie
Erforderlich
Erforderlich
Erforderlich
Vielleicht
Wenn der Client eine Transaktion aufweist
Wenn der Client keine Transaktion aufweist
Erforderlich
Erforderlich
Requires New
Always
Nie
Always
Erforderlich
Erforderlich

Transaktionsgrenzen

Eine Transaktion hat einen Anfang, ein Ende und tritt genau einmal auf. Während der Ausführung kann eine Transaktion eine Ressource aufrufen, z. B. eine Datenbank oder eine Warteschlange, um eine oder mehrere Aufgaben auszuführen. Jede Ressource liegt innerhalb der Transaktionsgrenze. Alle Ressourcen innerhalb einer Transaktionsgrenze, die mehrere Prozess- und Computergrenzen umfassen kann, teilen sich eine einzelne Transaktion. Die Verwaltung der Konsistenz über diese Prozess- und Computergrenzen hinweg ist wichtig.

COM+ stellt die Konsistenz sicher, indem Transaktionsgrenzen automatisch verwaltet werden, basierend auf dem Wert des Transaktionsattributes, das Sie für jede Komponente festlegen. Eine COM+-Transaktion fließt automatisch zu Objekten, die angewiesen sind, an einer Transaktion teilzunehmen, und umgeht Objekte, die zur Ausführung außerhalb einer Transaktion angewiesen sind. COM+ unterstützt keine geschachtelten Transaktionen. Stattdessen sind COM+-Transaktionen unterschiedlich und kurzlebig.

Das erste Objekt in einer Transaktionsgrenze ist speziell für die Transaktion und wird als Stammobjekt der Transaktion bezeichnet. Es kann nur ein Stammobjekt in einer Transaktion sein. Alle anderen Objekte in der Transaktionshierarchie unter dem Stammobjekt werden als innere Objekte bezeichnet.

Zuordnen von Transaktionen

Eine Möglichkeit, um sicherzustellen, dass ein Objekt in der richtigen Transaktionsgrenze enthalten ist, besteht darin, Ihre Transaktionen zuzuordnen, bevor Sie mit dem Schreiben der Komponenten beginnen. Durch Zuordnen von Transaktionen können Sie die beste Einstellung für jede komponente ermitteln, die Sie schreiben. Je sicherer Sie sind, wie Ihre Komponenten verwendet werden sollen, desto einfacher ist es, den richtigen Transaktionsattributewert auszuwählen.

Zur Laufzeit untersucht COM+ das Transaktionsattribute, um zu bestimmen, ob ein Objekt der Stamm einer neuen Transaktion sein, in einer vorhandenen Transaktion erstellt oder als nicht transaktionales Objekt erstellt werden soll.

Die folgende Abbildung zeigt eine mögliche Transaktionszuordnung. In der Abbildung erstellt der Client Objekt 1, das eine Transaktion erfordert. Da keine Transaktion vorhanden ist, erstellt COM+ Transaktion 1 und platziert Darin Objekt 1 als Stammobjekt. Objekt 1 erstellt Objekt 2, das Transaktionen unterstützt und daher in Transaktion 1 platziert wird. Objekt 2 erstellt Objekt 3, das keine Transaktionen unterstützt und daher außerhalb aller Transaktionen platziert wird. Objekt 2 erstellt auch Objekt 4, das eine Transaktion erfordert und daher in Transaktion 1 platziert wird. Objekt 3 erstellt Objekt 5, das Transaktionen unterstützt. Da Objekt 5 jedoch von einem Objekt erstellt wird, das nicht innerhalb einer Transaktion vorhanden ist, wird es auch außerhalb aller Transaktionen platziert. Objekt 4 erstellt Objekt 6, das eine neue Transaktion erfordert, sodass COM+ Transaktion 2 erstellt und Objekt 6 als Stammobjekt darin platziert. Objekt 6 erstellt Objekt 7, das Transaktionen unterstützt und daher in Transaktion 2 platziert wird.

Diagramm, das eine Clientinteraktion mit Transaktion 1 und Transaktion 2 zeigt.

Die obige Abbildung zeigt zwei potenzielle Problembereiche. Erstens wird der Großteil der Arbeit auf zwei verschiedene Transaktionen aufgeteilt. Wenn Transaktion 1 nach dem Erstellen von Objekt 6 in Objekt 4 fehlschlägt, wird Transaktion 2 nicht vom Ergebnis von Transaktion 1 ausgeführt. Wenn dieses Ergebnis unbeabsichtigt ist, ziehen Sie es möglicherweise vor, die Vorgänge beider Transaktionen in eine einzelne Transaktion zu falten, was Sie erreichen können, indem Sie das Transaktionsattribute von Objekt 6 in Erforderlich ändern.

Die Abbildung der Zuordnung zeigt auch, dass Objekt 3 und Objekt 5 nicht transaktional sind und vollständig außerhalb des Bereichs der Transaktionen 1 und 2 ausgeführt werden. Wenn Objekt 5 persistente Daten aktualisiert, sollten Sie die nicht transaktionalen status. Objekt 5 kann innerhalb einer Transaktion platziert werden, indem das Transaktionsattribute in Erforderlich geändert wird.

Festlegen des Transaktionsattributes