Transaction Notifications
KTM fournit une file d’attente de notification pour chaque gestionnaire de ressources. KTM remet des notifications à un gestionnaire de ressources en les plaçant dans la file d’attente du gestionnaire de ressources.
Un gestionnaire de ressources peut récupérer des notifications de sa file d’attente de manière synchrone ou asynchrone.
Pour récupérer des notifications de manière synchrone, le gestionnaire de ressources peut appeler à plusieurs reprises ZwGetNotificationResourceManager.
Pour recevoir des notifications de manière asynchrone, le gestionnaire de ressources peut appeler TmEnableCallbacks pour configurer une routine de rappel. KTM appelle la routine de rappel chaque fois qu’elle place une notification dans la file d’attente du gestionnaire de ressources.
Lorsqu’un gestionnaire de ressources appelle ZwCreateEnlistment pour créer une inscription pour une transaction, le gestionnaire de ressources spécifie les types de notifications qu’il doit recevoir. Les gestionnaires de ressources reçoivent uniquement des notifications qu’ils s’inscrivent pour recevoir.
Les constantes de notification sont définies dans Ktmtypes.h. Les noms des constantes de notification ont un format de TRANSACTION_NOTIFY_Xxx.
Le reste de cette rubrique répertorie toutes les constantes de notification que Ktmtypes.h définit et les divise en trois groupes :
Notifications que les gestionnaires de ressources peuvent recevoir
Notifications que les gestionnaires de transactions supérieurs peuvent recevoir
Constantes de notification définies mais non utilisées actuellement
Notifications pour les gestionnaires de ressources
Tous les gestionnaires de ressources doivent s’inscrire pour recevoir des notifications TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE et TRANSACTION_NOTIFY_COMMIT, même s’ils appellent ensuite ZwReadOnlyEnlistment pour marquer une inscription en lecture seule.
Les gestionnaires de ressources peuvent prendre en charge TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, mais ils doivent également prendre en charge les notifications de préparation, de préparation et de validation en plusieurs phases.
La liste suivante contient toutes les notifications que les gestionnaires de ressources peuvent recevoir :
TRANSACTION_NOTIFY_PREPREPARE
En cas d’envoi : un client appelle ZwCommitTransaction et aucun gestionnaire de ressources ne prend en charge la validation en une seule phase, ou si un gestionnaire de transactions supérieur appelle ZwPrePrepareEnlistment.
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : effectuez des opérations de pré-préparation, puis appelez ZwPrePrepareComplete. (Pour plus d’informations sur les opérations de préparation préalable, consultez Gestion des opérations de validation.)
Restrictions: Le gestionnaire de ressources doit également prendre en charge TRANSACTION_NOTIFY_PREPARE et TRANSACTION_NOTIFY_COMMIT.
TRANSACTION_NOTIFY_PREPARE
Lors de l’envoi : après TRANSACTION_NOTIFY_PREPREPARE si un client appelle ZwCommitTransaction et qu’aucun gestionnaire de ressources ne prend en charge la validation en phase unique, ou si un gestionnaire de transactions supérieur appelle ZwPrepareEnlistment.
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : Effectuez des opérations de préparation, puis appelez ZwPrepareComplete. (Pour plus d’informations sur les opérations de préparation, consultez Gestion des opérations de validation.)
Restrictions: Le gestionnaire de ressources doit également prendre en charge TRANSACTION_NOTIFY_PREPREPARE et TRANSACTION_NOTIFY_COMMIT.
TRANSACTION_NOTIFY_COMMIT
Lors de l’envoi : après TRANSACTION_NOTIFY_PREPARE si un client appelle ZwCommitTransaction et qu’aucun gestionnaire de ressources ne prend en charge la validation en une seule phase, ou si un gestionnaire de transactions supérieur appelle ZwCommitEnlistment.
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : effectuez des opérations de validation, puis appelez ZwCommitComplete. (Pour plus d’informations sur les opérations de validation, consultez Gestion des opérations de validation.)
Restrictions: Le gestionnaire de ressources doit également prendre en charge TRANSACTION_NOTIFY_PREPREPARE et TRANSACTION_NOTIFY_PREPARE.
TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
En cas d’envoi : un client appelle ZwCommitTransaction et un gestionnaire de ressources prend en charge les opérations de validation en une seule phase.
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : validez la transaction ou appelez ZwSinglePhaseReject. (Pour plus d’informations sur les opérations de validation à phase unique, consultez Gestion des opérations de validation.)
Restrictions: Le gestionnaire de ressources doit également prendre en charge TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE et TRANSACTION_NOTIFY_COMMIT.
TRANSACTION_NOTIFY_ROLLBACK
Lors de l’envoi : un client appelle ZwRollbackTransaction, un gestionnaire de transactions supérieur appelle ZwRollbackEnlistment ou KTM détecte une erreur (par exemple, un échec d’écriture dans le flux de journal).
Reçu par : Les gestionnaires de ressources et les gestionnaires de transactions supérieurs.
Action requise du destinataire : effectuez toutes les opérations nécessaires pour restaurer les données de la transaction, puis appelez ZwRollbackComplete. (Pour plus d’informations sur les opérations de restauration, consultez Gestion des opérations de restauration.)
Restrictions: Tous les gestionnaires de ressources et les gestionnaires de transactions supérieurs doivent prendre en charge TRANSACTION_NOTIFY_ROLLBACK.
TRANSACTION_NOTIFY_RECOVER
Lorsqu’il est envoyé : un gestionnaire de ressources appelle ZwRecoverResourceManager.
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : le gestionnaire de ressources doit appeler ZwRecoverEnlistment. (Pour plus d’informations sur les opérations de récupération, consultez Gestion des opérations de récupération.)
Restrictions : Aucun.
TRANSACTION_NOTIFY_LAST_RECOVER
En cas d’envoi : une fois que KTM a envoyé la dernière TRANSACTION_NOTIFY_RECOVER pour les inscriptions d’un gestionnaire de ressources.
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : Mettre fin à l’opération de récupération. (Pour plus d’informations sur les opérations de récupération, consultez Gestion des opérations de récupération.)
Restrictions : Aucun.
TRANSACTION_NOTIFY_INDOUBT
Lors de l’envoi : après qu’un gestionnaire de ressources a appelé ZwRecoverEnlistment, si KTM ne peut pas déterminer si la transaction doit être validée ou restaurée (généralement parce que le TPS a un gestionnaire de transactions supérieur qui n’est pas disponible).
Reçu par : Gestionnaires de ressources.
Action requise du destinataire : ne rien faire jusqu’à ce que KTM envoie TRANSACTION_NOTIFY_COMMIT ou TRANSACTION_NOTIFY_ROLLBACK.
Restrictions : Aucun.
TRANSACTION_NOTIFY_RM_DISCONNECTED
Lors de l’envoi : le gestionnaire de ressources qui gère une opération de validation à phase unique ferme le handle d’inscription sans indiquer qu’il a commité ou restauré la transaction.
Reçu par : gestionnaires de ressources et gestionnaires de transactions supérieurs qui ont des inscriptions pour la transaction.
Action requise du destinataire : opérations de nettoyage spécifiques à la transaction. En règle générale, cette notification est utile pour les gestionnaires de ressources en lecture seule.
Restrictions : Aucun.
Notifications pour les gestionnaires de transactions supérieurs
Les gestionnaires de transactions supérieurs peuvent recevoir les notifications suivantes :
TRANSACTION_NOTIFY_ROLLBACK
Consultez la description précédente.
TRANSACTION_NOTIFY_RM_DISCONNECTED
Consultez la description précédente.
TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Lors de l’envoi : une fois que tous les gestionnaires de ressources ont reçu TRANSACTION_NOTIFY_PREPREPARE et répondu en appelant ZwPrePrepareComplete.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : le gestionnaire de transactions supérieur doit appeler ZwPrepareEnlistment.
TRANSACTION_NOTIFY_PREPARE_COMPLETE
Lors de l’envoi : une fois que tous les gestionnaires de ressources ont reçu TRANSACTION_NOTIFY_PREPARE et répondu en appelant ZwPrepareComplete.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : le gestionnaire de transactions supérieur doit appeler ZwCommitEnlistment.
TRANSACTION_NOTIFY_COMMIT_COMPLETE
Lors de l’envoi : une fois que tous les gestionnaires de ressources ont reçu TRANSACTION_NOTIFY_COMMIT et répondu en appelant ZwCommitComplete.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : opérations de nettoyage de transaction.
TRANSACTION_NOTIFY_ROLLBACK_COMPLETE
Lors de l’envoi : une fois que tous les gestionnaires de ressources ont reçu TRANSACTION_NOTIFY_ROLLBACK et ont répondu en appelant ZwRollbackComplete.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : opérations de nettoyage de transaction.
TRANSACTION_NOTIFY_RECOVER_QUERY
En cas d’envoi : un gestionnaire de transactions supérieur appelle ZwRecoverResourceManager.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : le gestionnaire de transactions supérieur doit appeler ZwCommitEnlistment ou ZwRollbackEnlistment pour l’inscription.
TRANSACTION_NOTIFY_COMMIT_REQUEST
En cas d’envoi : un client appelle ZwCommitTransaction. Si un gestionnaire de transactions supérieur s’est inscrit à cette notification pour une inscription, KTM envoie TRANSACTION_NOTIFY_COMMIT_REQUEST au gestionnaire de transactions supérieur au lieu d’envoyer des TRANSACTION_NOTIFY_COMMIT aux gestionnaires de ressources.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : le gestionnaire de transactions supérieur appelle ZwCommitEnlistment.
TRANSACTION_NOTIFY_REQUEST_OUTCOME
En cas d’envoi : un gestionnaire de ressources appelle TmRequestOutcomeEnlistment alors que la transaction est dans son état préparé.
Reçu par : Gestionnaires de transactions supérieurs.
Action requise du destinataire : le gestionnaire de transactions supérieur doit appeler ZwCommitEnlistment ou ZwRollbackEnlistment.
Notifications inutilisées
Les notifications suivantes sont définies dans Ktmtypes.h, mais KTM ne les prend actuellement pas en charge :
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