Dela via


Transaktionsmeddelanden

KTM tillhandahåller en meddelandekö för varje resurshanterare. KTM levererar meddelanden till en resurshanterare genom att placera dem i resurshanterarens kö.

En resurshanterare kan hämta meddelanden från kön synkront eller asynkront.

  • Om du vill hämta meddelanden synkront kan resurshanteraren upprepade gånger anropa ZwGetNotificationResourceManager.

  • Om du vill ta emot meddelanden asynkront kan resurshanteraren anropa TmEnableCallbacks för att konfigurera en återanropsrutin. KTM anropar återanropsrutinen varje gång den placerar ett meddelande i resurshanterarens kö.

När en resurshanterare anropar ZwCreateEnlistment för att skapa en registrering för en transaktion anger resurshanteraren vilka typer av meddelanden som ska tas emot. Resurshanterare får bara meddelanden som de registrerar sig för att ta emot.

Meddelandekonstanterna definieras i Ktmtypes.h. Meddelandekonstantnamn har formatet TRANSACTION_NOTIFY_Xxx.

I resten av det här avsnittet visas alla meddelandekonstanter som Ktmtypes.h definierar och delar upp dem i tre grupper:

  • Meddelanden som resurshanterare kan ta emot

  • Meddelanden som överordnade transaktionshanterare kan ta emot

  • Meddelandekonstanter som har definierats men som för närvarande inte används

Aviseringar för resurshanterare

Alla resurshanterare måste registrera sig för att ta emot TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE och TRANSACTION_NOTIFY_COMMIT meddelanden, även om de senare anropar ZwReadOnlyEnlistment för att markera en lista som skrivskyddad.

Resurshanterare kan stödja TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, men de måste också ha stöd för aviseringar för förberedelse, förberedelse och incheckning i flera faser.

Följande lista innehåller alla meddelanden som resursansvariga kan ta emot:

TRANSACTION_NOTIFY_PREPREPARE
När den skickas: En klient anropar ZwCommitTransaction och ingen resurshanterare stöder enfasincheckning, eller om en överlägsen transaktionshanterare anropar ZwPrePrepareEnlistment.

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Utför förförberedande åtgärder och anropa sedan ZwPrePrepareComplete. (Mer information om förberedande åtgärder finns i Hantering av commit-åtgärder.)

Inskränkningar: Resurshanteraren måste också ha stöd för TRANSACTION_NOTIFY_PREPARE och TRANSACTION_NOTIFY_COMMIT.

TRANSAKTIONS_NOTIFYERA_FÖRBERED
När det skickas: Efter TRANSACTION_NOTIFY_PREPREPARE om en klient anropar ZwCommitTransaction och ingen resurshanterare stöder enfasincheckning, eller om en överlägsen transaktionshanterare anropar ZwPrepareEnlistment.

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Utför förberedelseåtgärder och anropa sedan ZwPrepareComplete. (För mer information om förberedelseåtgärder, se Hantering av commit-opereringar.)

Inskränkningar: Resurshanteraren måste också ha stöd för TRANSACTION_NOTIFY_PREPREPARE och TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_COMMIT
När det skickas: Efter TRANSACTION_NOTIFY_PREPARE om en klient anropar ZwCommitTransaction och ingen resurshanterare stöder enfasincheckning, eller om en överlägsen transaktionshanterare anropar ZwCommitEnlistment.

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Utför commit-åtgärder och anropa sedan ZwCommitComplete. (Mer information om transaktionsåtgärder finns i Hantering av transaktionsåtgärder.)

Inskränkningar: Resurshanteraren måste också ha stöd för TRANSACTION_NOTIFY_PREPREPARE och TRANSACTION_NOTIFY_PREPARE.

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
När den skickas: En klient anropar ZwCommitTransaction och en resurshanterare stöder enfasincheckningsåtgärder.

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Genomför antingen transaktionen eller anropa ZwSinglePhaseReject. (Mer information om enfasincheckningsåtgärder finns i Hantera incheckningsåtgärder.)

Inskränkningar: Resurshanteraren måste också ha stöd för TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE och TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
När den skickas: En klient anropar ZwRollbackTransaction, en överlägsen transaktionshanterare anropar ZwRollbackEnlistment eller KTM identifierar ett fel (till exempel en misslyckad skrivning till loggströmmen).

Mottagen av: Både resurshanterare och överlägsna transaktionshanterare.

Mottagarens nödvändiga åtgärd: Utför alla åtgärder som behövs för att återställa transaktionens data och anropa sedan ZwRollbackComplete. (Mer information om återställningsåtgärder finns i Hantera återställningsåtgärder.)

Inskränkningar: Alla resurshanterare och överlägsna transaktionshanterare måste ha stöd för TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
När den skickas: En resurshanterare anropar ZwRecoverResourceManager.

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Resurshanteraren måste anropa ZwRecoverEnlistment. (Mer information om återställningsåtgärder finns i Hantera återställningsåtgärder.)

Inskränkningar: Ingen.

TRANSACTION_NOTIFY_LAST_RECOVER
När det skickas: När KTM har skickat den senaste TRANSACTION_NOTIFY_RECOVER för en resurshanterares registreringar.

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Avsluta återställningsåtgärden. (Mer information om återställningsåtgärder finns i Hantera återställningsåtgärder.)

Inskränkningar: Ingen.

TRANSACTION_NOTIFY_INDOUBT
När den skickas: När en resurshanterare anropar ZwRecoverEnlistment, om KTM inte kan avgöra om transaktionen ska bekräftas eller rullas tillbaka (vanligtvis eftersom TPS har en överordnad transaktionshanterare som inte är tillgänglig).

Mottagen av: Resurshanterare.

Mottagarens nödvändiga åtgärd: Gör ingenting förrän KTM skickar TRANSACTION_NOTIFY_COMMIT eller TRANSACTION_NOTIFY_ROLLBACK.

Inskränkningar: Ingen.

TRANSAKTION_NOTIFIERA_RM_FRÅN_KOPPLAD
När den skickas: Resurshanteraren som hanterar en enfasincheckningsåtgärd stänger listningshandtaget utan att ange att den har checkat in eller återställt transaktionen.

Mottaget av: Resurshanterare och överordnade transaktionshanterare som har anslutningar för transaktionen.

Mottagarens nödvändiga åtgärd: Transaktionsspecifika rensningsåtgärder. Det här meddelandet är vanligtvis användbart för resursansvariga med skrivskyddad åtkomst.

Inskränkningar: Ingen.

Meddelanden för överordnade transaktionshanterare

Överlägsna transaktionshanterare kan få följande meddelanden:

TRANSACTION_NOTIFY_ROLLBACK
Se tidigare beskrivning.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Se tidigare beskrivning.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
När det skickas: När alla resurshanterare har tagit emot TRANSACTION_NOTIFY_PREPREPARE och svarat genom att anropa ZwPrePrepareComplete.

Mottagen av: Utmärkta transaktionshanterare.

Mottagarens nödvändiga åtgärd: Den överordnade transaktionshanteraren bör anropa ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
När de har skickats: När alla resurshanterare har tagit emot TRANSACTION_NOTIFY_PREPARE och svarat genom att anropa ZwPrepareComplete.

Mottaget av: Avancerade transaktionshanterare.

Mottagarens nödvändiga åtgärd: Den överordnade transaktionshanteraren bör anropa ZwCommitEnlistment.

TRANSAKTION_BEKRÄFTA_KOMMITT_FULLFÖRD
När de har skickats: När alla resurshanterare har tagit emot TRANSACTION_NOTIFY_COMMIT och svarat genom att anropa ZwCommitComplete.

Mottaget av: Bästa transaktionshanterare.

Mottagarens nödvändiga åtgärd: Transaktionsrensningsåtgärder.

TRANSAKTION_NOTIFYERA_ÅTERSTÄLLNING_COMPLET
När de skickas: När alla resurshanterare har tagit emot TRANSACTION_NOTIFY_ROLLBACK och svarat genom att anropa ZwRollbackComplete.

Mottagen av: Överlägsna transaktionshanterare.

Mottagarens nödvändiga åtgärd: Transaktionsrensningsåtgärder.

TRANSAKTION_NOTIFIERA_ÅTERSTÄLL_FRÅGA
När den skickas: En överlägsen transaktionshanterare anropar ZwRecoverResourceManager.

Mottagna av: Överlägsna transaktionshanterare.

Mottagarens nödvändiga åtgärd: Den överordnade transaktionshanteraren måste anropa antingen ZwCommitEnlistment eller ZwRollbackEnlistment för registreringen.

TRANSAKTIONS_NOTIFY_COMMIT_BEGÄRAN
När den skickas: En klient anropar ZwCommitTransaction. Om en överlägsen transaktionshanterare har registrerat sig för det här meddelandet för en registrering skickar KTM TRANSACTION_NOTIFY_COMMIT_REQUEST till den överordnade transaktionshanteraren i stället för att skicka TRANSACTION_NOTIFY_COMMIT till resurshanterarna.

Mottaget av: Toppklass transaktionshanterare.

Mottagarens nödvändiga åtgärd: Den överlägsna transaktionshanteraren anropar ZwCommitEnlistment.

TRANSAKTION_NOTIFIERA_BEGÄRAN_RESULTAT
När den skickas: En resurshanterare anropar TmRequestOutcomeEnlistment medan transaktionen är i sitt förberedda tillstånd.

Mottagen av: Överlägsna transaktionshanterare.

Mottagarens nödvändiga åtgärd: Den överordnade transaktionshanteraren måste anropa ZwCommitEnlistment eller ZwRollbackEnlistment.

Oanvända meddelanden

Följande meddelanden definieras i Ktmtypes.h, men KTM stöder för närvarande inte dem:

Meddelande om transaktion: Delegaera åtagande

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSAKTION_MEDDELANDE_ANMÄLAN_FÖRBERED_FÖRBEREDELSE

TRANSACTION_NOTIFY_MARSHAL

TRANSAKTION_NOTIFYERA_MARKNADSFÖR

TRANSAKTION_NOTIFY_PROMOTE_NY

TRANSAKTION_MEDDELA_SPRIDA_DRA

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSAKTIONS_NOTIFY_TM_ONLINE

TRANSAKTION_NOTIFIERA_BEKRÄFTANDE_SLUTFÖRA