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:

  1. 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.
  2. COM+ kommuniziert mit dem Distributed Transaction Coordinator (DTC), um eine Transaktion zu starten. Der DTC koordiniert die physische Transaktion.
  3. 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.
  4. 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.

Konsistente und fertige Flags

Beschleunigen von Transaktionen durch Benachrichtigen des Stammobjekts

Beenden einer automatischen Transaktion durch Aufrufen von SetComplete