Verwalten automatischer Transaktionen in COM+
Im COM+-Programmiermodell können Sie Ihre Komponenten so entwerfen, dass sie das tun, was sie am besten können – geschäftslogik aktivieren oder eine Datenbankverbindung herstellen – und sich auf das Transaktionsverarbeitungsframework von Microsoft Windows verlassen, um Transaktionen zu automatisieren.
Starten einer Transaktion
COM+ startet automatisch eine Transaktion, wenn eine der folgenden Bedingungen auftritt:
- Wenn ein nicht transaktionaler Client eine Komponente aufruft, die eine Transaktion oder eine neue Transaktion erfordert.
- Wenn ein Transaktionsclient eine Komponente aufruft, die eine neue Transaktion erfordert.
Wenn COM+ feststellt, dass ein Objekt über eine neue Transaktion verfügen soll, beginnt es zuerst die Transaktion und platziert dann das Objekt darin. Der Vorgang umfasst folgende Schritte:
- COM+ erstellt ein Kontextobjekt, legt sowohl die ATTRIBUTE JIT-Aktivierung als auch Synchronisierung auf Erforderlich fest und legt die konsistenten flags und done-Flags auf True bzw. False fest.
- COM+ kommuniziert mit dem Distributed Transaction Coordinator (DTC), um eine Transaktion zu starten. Der DTC koordiniert die physische Transaktion.
- Der DTC generiert einen Transaktionsbezeichner und übergibt ihn an COM+. Der Transaktionsbezeichner richtet eine Transaktionsgrenze ein. Alle objekte, die an der Transaktion teilnehmen, verwenden denselben Bezeichner.
- Wenn der Client das Objekt erstellt, aktiviert COM+ es innerhalb der Transaktionsgrenze.
Beenden einer Transaktion
COM+ beendet eine automatische Transaktion durch Committen oder Abbrechen, wenn eine der folgenden Bedingungen auftritt:
- Das Stammobjekt der Transaktion schließt seine Arbeit ab, und COM+ gibt es frei. Nachdem das Stammobjekt deaktiviert wurde, versucht die Transaktion, einen Commit durchzuführen.
- Der Client gibt das Stammobjekt frei. Ohne Verweis wird das Stammobjekt deaktiviert, und die Transaktion versucht, einen Commit durchzuführen.
- Die Transaktion überschreitet den Time out-Schwellenwert. Die Transaktion wird automatisch abgebrochen, wenn innerhalb des Transaktionstime out-Zeitraums kein Commit ausgeführt wurde, und deaktiviert alle objekte, die der Transaktion zugeordnet sind. Das Standardmäßige Transaktionstime out beträgt 60 Sekunden.