Transaktionsbenachrichtigungen

KTM stellt eine Benachrichtigungswarteschlange für jeden Resource Manager bereit. KTM sendet Benachrichtigungen an einen Ressourcen-Manager, indem er in die Warteschlange des Ressourcen-Managers versetzt wird.

Ein Ressourcen-Manager kann Benachrichtigungen aus seiner Warteschlange entweder synchron oder asynchron abrufen.

  • Um Benachrichtigungen synchron abzurufen, kann der Ressourcen-Manager wiederholt ZwGetNotificationResourceManager aufrufen.

  • Um Benachrichtigungen asynchron zu empfangen, kann der Ressourcen-Manager TmEnableCallbacks aufrufen, um eine Rückrufroutine einzurichten. KTM ruft die Rückrufroutine jedes Mal auf, wenn eine Benachrichtigung in der Warteschlange des Ressourcen-Managers platziert wird.

Wenn ein Ressourcen-Manager ZwCreateEnlistment aufruft , um eine Registrierung für eine Transaktion zu erstellen, gibt der Ressourcen-Manager die Typen von Benachrichtigungen an, die er empfangen soll. Ressourcenmanager erhalten nur Benachrichtigungen, für die sie sich registrieren.

Die Benachrichtigungskonstanten sind in "Ktmtypes.h" definiert. Namen von Benachrichtigungskonstanten haben das Format TRANSACTION_NOTIFY_Xxx.

Im weiteren Verlauf dieses Themas werden alle Benachrichtigungskonstanten aufgelistet, die von Ktmtypes.h definiert werden, und sie in drei Gruppen unterteilt:

  • Benachrichtigungen, die Ressourcen-Manager erhalten können

  • Benachrichtigungen, die übergeordnete Transaktionsmanager erhalten können

  • Benachrichtigungskonstanten, die definiert, aber derzeit nicht verwendet werden

Benachrichtigungen für Ressourcen-Manager

Alle Ressourcenmanager müssen sich registrieren, um TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE und TRANSACTION_NOTIFY_COMMIT Benachrichtigungen zu erhalten, auch wenn sie anschließend ZwReadOnlyEnlistment aufrufen, um eine Eintragung als schreibgeschützt zu markieren.

Ressourcenmanager können TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT unterstützen, müssen aber auch die mehrstufigen Vor-, Vorbereitungs- und Commitbenachrichtigungen unterstützen.

Die folgende Liste enthält alle Benachrichtigungen, die Ressourcen-Manager erhalten können:

TRANSACTION_NOTIFY_PREPREPARE
Beim Senden: Ein Client ruft ZwCommitTransaction auf, und kein Ressourcen-Manager unterstützt den einstufigen Commit, oder wenn ein überlegener Transaktions-ManagerZwPrePrepareEnlistment aufruft.

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Führen Sie Vorabvorbereitungsvorgänge aus, und rufen Sie dann ZwPrePrepareComplete auf. (Weitere Informationen zu Vorbereitungsvorgängen finden Sie unter Behandeln von Commitvorgängen.)

Einschränkungen: Der Ressourcen-Manager muss auch TRANSACTION_NOTIFY_PREPARE und TRANSACTION_NOTIFY_COMMIT unterstützen.

TRANSACTION_NOTIFY_PREPARE
Beim Senden: Nach TRANSACTION_NOTIFY_PREPREPARE, wenn ein Client ZwCommitTransaction aufruft und kein Ressourcen-Manager einen einstufigen Commit unterstützt, oder wenn ein überlegener Transaktions-Manager ZwPrepareEnlistment aufruft.

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Führen Sie Vorbereitungsvorgänge aus, und rufen Sie dann ZwPrepareComplete auf. (Weitere Informationen zu Vorbereitungsvorgängen finden Sie unter Behandeln von Commitvorgängen.)

Einschränkungen: Der Ressourcen-Manager muss auch TRANSACTION_NOTIFY_PREPREPARE und TRANSACTION_NOTIFY_COMMIT unterstützen.

TRANSACTION_NOTIFY_COMMIT
Beim Senden: Nach TRANSACTION_NOTIFY_PREPARE, wenn ein Client ZwCommitTransaction aufruft und kein Ressourcen-Manager einen einstufigen Commit unterstützt, oder wenn ein überlegener Transaktions-Manager ZwCommitEnlistment aufruft.

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Führen Sie Commitvorgänge aus, und rufen Sie dann ZwCommitComplete auf. (Weitere Informationen zu Commitvorgängen finden Sie unter Behandeln von Commitvorgängen.)

Einschränkungen: Der Ressourcen-Manager muss auch TRANSACTION_NOTIFY_PREPREPARE und TRANSACTION_NOTIFY_PREPARE unterstützen.

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
Wenn gesendet: Ein Client ruft ZwCommitTransaction auf, und ein Ressourcen-Manager unterstützt einstufige Commitvorgänge.

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Committen Sie die Transaktion, oder rufen Sie ZwSinglePhaseReject auf. (Weitere Informationen zu einphasigen Commitvorgängen finden Sie unter Behandeln von Commitvorgängen.)

Einschränkungen: Der Ressourcen-Manager muss auch TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE und TRANSACTION_NOTIFY_COMMIT unterstützen.

TRANSACTION_NOTIFY_ROLLBACK
Beim Senden: Ein Client ruft ZwRollbackTransaction auf, ein überlegener Transaktions-Manager ruft ZwRollbackEnlistment auf, oder KTM erkennt einen Fehler (z. B. einen fehlerhaften Schreibvorgang in den Protokolldatenstrom).

Empfangen von: Sowohl Ressourcenmanager als auch übergeordnete Transaktionsmanager.

Erforderliche Aktion des Empfängers: Führen Sie alle Vorgänge aus, die zum Zurücksetzen der Transaktionsdaten erforderlich sind, und rufen Sie dann ZwRollbackComplete auf. (Weitere Informationen zu Rollbackvorgängen finden Sie unter Behandeln von Rollbackvorgängen.)

Einschränkungen: Alle Ressourcen-Manager und übergeordneten Transaktions-Manager müssen TRANSACTION_NOTIFY_ROLLBACK unterstützen.

TRANSACTION_NOTIFY_RECOVER
Wenn gesendet: Ein Ressourcen-Manager ruft ZwRecoverResourceManager auf.

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Der Ressourcen-Manager muss ZwRecoverEnlistment aufrufen. (Weitere Informationen zu Wiederherstellungsvorgängen finden Sie unter Behandeln von Wiederherstellungsvorgängen.)

Einschränkungen: Keine.

TRANSACTION_NOTIFY_LAST_RECOVER
Wenn gesendet: Nachdem KTM die letzte TRANSACTION_NOTIFY_RECOVER für die Eintragungen eines Ressourcenmanagers gesendet hat.

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Beenden sie den Wiederherstellungsvorgang. (Weitere Informationen zu Wiederherstellungsvorgängen finden Sie unter Behandeln von Wiederherstellungsvorgängen.)

Einschränkungen: Keine.

TRANSACTION_NOTIFY_INDOUBT
Beim Senden: Nachdem ein Ressourcen-Manager ZwRecoverEnlistment aufgerufen hat, kann KTM nicht ermitteln, ob für die Transaktion ein Commit ausgeführt oder ein Rollback ausgeführt werden soll (in der Regel, weil der TPS über einen überlegenen Transaktions-Manager verfügt, der nicht verfügbar ist).

Empfangen von: Ressourcenmanager.

Erforderliche Aktion des Empfängers: Machen Sie nichts, bis KTM TRANSACTION_NOTIFY_COMMIT oder TRANSACTION_NOTIFY_ROLLBACK sendet.

Einschränkungen: Keine.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Beim Senden: Der Ressourcen-Manager, der einen einstufigen Commitvorgang verarbeitet, schließt das Eintragshandle, ohne anzugeben, dass für die Transaktion ein Commit ausgeführt oder ein Rollback ausgeführt wurde.

Empfangen von: Ressourcen-Manager und übergeordnete Transaktions-Manager, die über Listen für die Transaktion verfügen.

Erforderliche Aktion des Empfängers: Transaktionsspezifische Bereinigungsvorgänge. In der Regel ist diese Benachrichtigung für schreibgeschützte Ressourcenmanager nützlich.

Einschränkungen: Keine.

Benachrichtigungen für übergeordnete Transaktionsmanager

Übergeordnete Transaktionsmanager können die folgenden Benachrichtigungen erhalten:

TRANSACTION_NOTIFY_ROLLBACK
Siehe vorherige Beschreibung.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Siehe vorherige Beschreibung.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Beim Senden: Nachdem alle Ressourcenmanager TRANSACTION_NOTIFY_PREPREPARE empfangen und durch Aufrufen von ZwPrePrepareComplete geantwortet haben.

Empfangen von: Übergeordnete Transaktionsmanager.

Erforderliche Aktion des Empfängers: Der übergeordnete Transaktions-Manager sollte ZwPrepareEnlistment aufrufen.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Beim Senden: Nachdem alle Ressourcenmanager TRANSACTION_NOTIFY_PREPARE empfangen und durch Aufrufen von ZwPrepareComplete geantwortet haben.

Empfangen von: Übergeordnete Transaktionsmanager.

Erforderliche Aktion des Empfängers: Der übergeordnete Transaktions-Manager sollte ZwCommitEnlistment aufrufen.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Beim Senden: Nachdem alle Ressourcenmanager TRANSACTION_NOTIFY_COMMIT empfangen und durch Aufrufen von ZwCommitComplete geantwortet haben.

Empfangen von: Übergeordnete Transaktionsmanager.

Erforderliche Aktion des Empfängers: Transaktionsbereinigungsvorgänge.

TRANSACTION_NOTIFY_ROLLBACK_COMPLETE
Wenn gesendet: Nachdem alle Ressourcenmanager TRANSACTION_NOTIFY_ROLLBACK empfangen und durch Aufrufen von ZwRollbackComplete geantwortet haben.

Empfangen von: Überlegene Transaktionsmanager.

Erforderliche Aktion des Empfängers: Transaktionsbereinigungsvorgänge.

TRANSACTION_NOTIFY_RECOVER_QUERY
Gesendet: Ein überlegener Transaktions-Manager ruft ZwRecoverResourceManager auf.

Empfangen von: Überlegene Transaktionsmanager.

Erforderliche Aktion des Empfängers: Der übergeordnete Transaktions-Manager muss entweder ZwCommitEnlistment oder ZwRollbackEnlistment für die Aufnahme aufrufen.

TRANSACTION_NOTIFY_COMMIT_REQUEST
Gesendet: Ein Client ruft ZwCommitTransaction auf. Wenn sich ein höherer Transaktionsmanager für diese Benachrichtigung für eine Registrierung registriert hat, sendet KTM TRANSACTION_NOTIFY_COMMIT_REQUEST an den übergeordneten Transaktionsmanager, anstatt TRANSACTION_NOTIFY_COMMIT an die Ressourcenmanager zu senden.

Empfangen von: Überlegene Transaktionsmanager.

Erforderliche Aktion des Empfängers: Der übergeordnete Transaktions-Manager ruft ZwCommitEnlistment auf.

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Beim Senden: Ein Ressourcen-Manager ruft TmRequestOutcomeEnlistment auf, während sich die Transaktion im vorbereiteten Zustand befindet.

Empfangen von: Überlegene Transaktionsmanager.

Erforderliche Aktion des Empfängers: Der übergeordnete Transaktions-Manager muss ZwCommitEnlistment oder ZwRollbackEnlistment aufrufen.

Nicht verwendete Benachrichtigungen

Die folgenden Benachrichtigungen sind in Ktmtypes.h definiert, aber KTM unterstützt sie derzeit nicht:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

TRANSACTION_NOTIFY_PROMOTE

TRANSACTION_NOTIFY_PROMOTE_NEW

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE