Delen via


Transactiemeldingen

KTM biedt een meldingswachtrij voor elke resourcemanager. KTM levert meldingen aan een resourcemanager door ze in de wachtrij van de resourcemanager te plaatsen.

Een Resource Manager kan meldingen uit de wachtrij synchroon of asynchroon ophalen.

  • Als u meldingen synchroon wilt ophalen, kan de resourcemanager ZwGetNotificationResourceManager herhaaldelijk aanroepen.

  • Als u asynchroon meldingen wilt ontvangen, kan de resourcemanager TmEnableCallbacks aanroepen om een callback-routine in te stellen. KTM roept de callback-routine elke keer aan wanneer een melding in de wachtrij van de resourcemanager wordt geplaatst.

Wanneer een resourcemanager ZwCreateEnlistment aanroept om een aanhaling voor een transactie te maken, geeft de resourcemanager de typen meldingen op die moeten worden ontvangen. Resourcemanagers ontvangen alleen meldingen die ze registreren om te ontvangen.

De meldingsconstanten worden gedefinieerd in Ktmtypes.h. Namen van meldingsconstanten hebben een indeling van TRANSACTION_NOTIFY_Xxx.

De rest van dit onderwerp bevat alle meldingsconstanten die Ktmtypes.h definieert en verdeelt deze in drie groepen:

  • Meldingen die resourcemanagers kunnen ontvangen

  • Meldingen die superieure transactiebeheerders kunnen ontvangen

  • Meldingsconstanten die zijn gedefinieerd, maar momenteel niet worden gebruikt

Meldingen voor resourcemanagers

Alle resourcemanagers moeten zich registreren om TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE en TRANSACTION_NOTIFY_COMMIT meldingen te ontvangen, zelfs als ze ZwReadOnlyEnlistment vervolgens aanroepen om een opname als alleen-lezen te markeren.

Resourcebeheerders kunnen ondersteuning bieden voor TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, maar ze moeten ook ondersteuning bieden voor de multi-fase meldingen pre-prepare, prepare en commit.

De volgende lijst bevat alle meldingen die resourcemanagers kunnen ontvangen:

TRANSACTION_NOTIFY_PREPREPARE
Wanneer deze wordt verzonden: Een client roept ZwCommitTransaction aan en geen resource manager ondersteunt doorvoeren in één fase, of als een superieure transactiemanagerZwPreprepareEnlistment aanroept.

Ontvangen door: Resourcemanagers.

Vereiste actie van de geadresseerde: Voer voorbereidende bewerkingen uit en roep vervolgens ZwPrePrepareComplete aan. (Zie Commitbewerkingen afhandelen voor meer informatie over vooraf voorbereide bewerkingen.)

Beperkingen: De resourcemanager moet ook ondersteuning bieden voor TRANSACTION_NOTIFY_PREPARE en TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_PREPARE
Wanneer deze wordt verzonden: Na TRANSACTION_NOTIFY_PREPREPARE of een client ZwCommitTransaction aanroept en geen resource manager ondersteuning biedt voor doorvoeren in één fase, of als een superieure transactiemanager ZwPrepareEnlistment aanroept.

Ontvangen door: Resourcemanagers.

De vereiste actie van de geadresseerde: Voer voorbereidingsbewerkingen uit en roep zwPrepareComplete aan. (Zie Doorvoerbewerkingen verwerken voor meer informatie over voorbereidingsbewerkingen.)

Beperkingen: De resourcemanager moet ook ondersteuning bieden voor TRANSACTION_NOTIFY_PREPREPARE en TRANSACTION_NOTIFY_COMMIT.

TRANSACTIE_MELDING_COMMIT
Wanneer dit wordt verzonden: Na TRANSACTION_NOTIFY_PREPARE als een client ZwCommitTransaction aanroept en geen resource manager ondersteuning biedt voor doorvoeren in één fase, of als een superieure transactiemanager ZwCommitEnlistment aanroept.

Ontvangen door: Resourcemanagers.

De vereiste actie van de geadresseerde: Voer doorvoerbewerkingen uit en roep zwCommitComplete aan. (Voor meer informatie over commitbewerkingen, zie Commitbewerkingen afhandelen.)

Beperkingen: De resourcemanager moet ook ondersteuning bieden voor TRANSACTION_NOTIFY_PREPREPARE en TRANSACTION_NOTIFY_PREPARE.

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
Wanneer deze wordt verzonden: Een client roept ZwCommitTransaction aan en een resourcemanager ondersteunt doorvoerbewerkingen met één fase.

Ontvangen door: Resourcemanagers.

De vereiste actie van de ontvanger: voer de transactie door of roep ZwSinglePhaseReject aan. (Zie Verwerken van single-phase commit-bewerkingen voor meer informatie over single-phase commit-bewerkingen.)

Beperkingen: De resourcemanager moet ook ondersteuning bieden voor TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE en TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
Wanneer deze wordt verzonden: Een client roept ZwRollbackTransaction aan, een superieure transactiebeheerder roept ZwRollbackEnlistment aan of KTM detecteert een fout (zoals een mislukte schrijfbewerking naar de logboekstroom).

Ontvangen door: Zowel resourcemanagers als superieure transactiebeheerders.

De vereiste actie van de geadresseerde: voer alle bewerkingen uit die nodig zijn om de gegevens van de transactie terug te draaien en roep ZwRollbackComplete aan. Voor meer informatie over terugdraaibewerkingen, zie Terugdraaibewerkingen verwerken.

Beperkingen: Alle resourcemanagers en superieure transactiebeheerders moeten ondersteuning bieden voor TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
Wanneer verzonden: Een resourcemanager roept ZwRecoverResourceManager aan.

Ontvangen door: Resourcemanagers.

De vereiste actie van de geadresseerde: De resourcemanager moet ZwRecoverEnlistment aanroepen. (Voor meer informatie over herstelbewerkingen, zie Herstelbewerkingen verwerken.)

Beperkingen: Geen.

TRANSACTIE_MELD_LAATSTE_HERSTEL
Wanneer verzonden: Nadat KTM de laatste TRANSACTION_NOTIFY_RECOVER heeft verzonden voor de aanmeldlijsten van een resourcemanager.

Ontvangen door: Resourcemanagers.

De vereiste actie van de geadresseerde: de herstelbewerking beëindigen. (Zie Herstelbewerkingen afhandelen voor meer informatie over herstelbewerkingen.)

Beperkingen: Geen.

TRANSACTION_NOTIFY_INDOUBT
Wanneer deze wordt verzonden: Nadat een resourcemanager ZwRecoverEnlistment aanroept, kan KTM niet bepalen of de transactie moet worden doorgevoerd of teruggedraaid (meestal omdat de TPS een superieure transactiebeheerder heeft die niet beschikbaar is).

Ontvangen door: Resourcebeheerders.

De vereiste actie van de geadresseerde: Doe niets totdat KTM TRANSACTION_NOTIFY_COMMIT of TRANSACTION_NOTIFY_ROLLBACK verzendt.

Beperkingen: Geen.

TRANSACTIE_MELDEN_RM_LOSGEKOPPELD
Wanneer het wordt verzonden: De resource manager die een eenfase-commitbewerking verwerkt, sluit de enlistmenthandle zonder aan te geven dat hij de transactie heeft gecommitteerd of teruggedraaid.

Ontvangen door: Resourcemanagers en hogere transactiebeheerders die bij de transactie betrokken zijn.

De vereiste actie van de geadresseerde: Transactiespecifieke opschoonbewerkingen. Deze melding is doorgaans handig voor resourcemanagers met het kenmerk Alleen-lezen.

Beperkingen: Geen.

Meldingen voor superieure transactiemanagers

Superieure transactiebeheerders kunnen de volgende meldingen ontvangen:

TRANSACTION_NOTIFY_ROLLBACK
Zie een eerdere beschrijving.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Zie een eerdere beschrijving.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Wanneer deze wordt verzonden: Nadat alle resourcemanagers TRANSACTION_NOTIFY_PREPREPARE hebben ontvangen en hebben gereageerd door ZwPrePrepareComplete aan te roepen.

Ontvangen door: Uitstekende transactiemanagers.

Vereiste actie van geadresseerde: De superieure transactiebeheerder moet ZwPrepareEnlistment aanroepen.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Wanneer verzonden: Nadat alle resourcebeheerders TRANSACTION_NOTIFY_PREPARE hebben ontvangen en hebben gereageerd door ZwPrepareComplete aan te roepen.

Ontvangen door: Superieure transactiemanagers.

De vereiste actie van de ontvanger: de superieure transactiebeheerder moet ZwCommitEnlistment aanroepen.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Wanneer verzonden: Nadat alle resourcemanagers TRANSACTION_NOTIFY_COMMIT hebben ontvangen en hebben gereageerd door ZwCommitComplete aan te roepen.

Ontvangen door: Transactiemanagers met superieure vaardigheden.

De vereiste actie van de geadresseerde: bewerkingen voor het opschonen van transacties.

TRANSACTION_NOTIFY_ROLLBACK_COMPLETE
Wanneer deze wordt verzonden: Nadat alle resourcemanagers TRANSACTION_NOTIFY_ROLLBACK hebben ontvangen en hebben gereageerd door ZwRollbackComplete aan te roepen.

Ontvangen door: Uitstekende transactiemanagers.

De vereiste actie van de geadresseerde: bewerkingen voor het opschonen van transacties.

TRANSACTIE_MELDING_HERSTEL_VRAAG
Wanneer verzonden: Een superieure transactiemanager roept ZwRecoverResourceManager aan.

Ontvangen door: Superieure transactiemanagers.

Vereiste actie van de ontvanger: de superieure transactiemanager moet ZwCommitEnlistment of ZwRollbackEnlistment aanroepen voor de enlistment.

TRANSACTION_NOTIFY_COMMIT_REQUEST (verzoek om transactiecommitmelding)
Wanneer verzonden: Een client roept ZwCommitTransaction aan. Als een superieure transactiemanager zich heeft geregistreerd voor deze melding voor een opname, stuurt KTM TRANSACTION_NOTIFY_COMMIT_REQUEST naar de superieure transactiemanager in plaats van TRANSACTION_NOTIFY_COMMIT naar de resourcemanagers te verzenden.

Ontvangen door: Superieure transactiemanagers.

De vereiste actie van de geadresseerde: De superieure transactiebeheerder roept ZwCommitEnlistment aan.

TRANSACTION_MELD_AANVRAAG_UITKOMST
Wanneer deze wordt verzonden: Een resourcemanager roept TmRequestOutcomeEnlistment aan terwijl de transactie de voorbereide status heeft.

Ontvangen door: Superieure transactiemanagers.

Vereiste actie van geadresseerde: De superieure transactiebeheerder moet ZwCommitEnlistment of ZwRollbackEnlistment aanroepen.

Ongebruikte meldingen

De volgende meldingen worden gedefinieerd in Ktmtypes.h, maar KTM biedt momenteel geen ondersteuning voor deze meldingen:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

TRANSACTIE_MELD_PROMOTIE

TRANSACTION_NOTIFY_PROMOTE_NEW

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE