Création d’un gestionnaire de transactions supérieur

Dans KTM, un gestionnaire de transactions supérieur est un gestionnaire de ressources qui crée des inscriptions supérieures pour les transactions auxquelles il participe. Une inscription supérieure est une inscription qui accorde au gestionnaire de ressources la possibilité de coordonner l’opération de validation pour la transaction de l’inscription. En d’autres termes, un client transactionnel ou le gestionnaire de transactions supérieur peut démarrer la séquence de pré-préparation/préparation/validation pour la transaction.

Une fois qu’un gestionnaire de ressources a créé une inscription supérieure pour une transaction, KTM rejette tous les appels à ZwCommitTransaction pour la transaction. Par conséquent, les clients transactionnels ne peuvent pas valider une telle transaction. Au lieu de cela, le gestionnaire de ressources qui a créé l’inscription supérieure doit appeler ZwPrePrepareEnlistment, ZwPrepareEnlistment et ZwCommitEnlistment.

Quand créer un gestionnaire de transactions supérieur

Supposons que vous souhaitiez intégrer un composant de système de traitement des transactions (TPS) à KTM, mais que le composant contient ses propres fonctionnalités de gestion des transactions non KTM que les clients peuvent appeler. Dans une telle situation, vous devrez peut-être créer un gestionnaire de transactions supérieur.

Par exemple, supposons que votre composant fournisse ses propres interfaces que les clients utilisent pour créer et valider des transactions. Étant donné que les clients de votre composant n’appellent pas KTM pour créer ou valider des transactions, votre composant doit devenir un gestionnaire de transactions supérieur lorsque vous l’intégrez à un TPS basé sur KTM.

Guide pratique pour créer un gestionnaire de transactions supérieur

Si vous souhaitez que votre composant soit un gestionnaire de transactions supérieur, il doit effectuer les opérations suivantes :

  1. Appelez ZwCreateResourceManager pour vous inscrire en tant que gestionnaire de ressources.

  2. Appelez ZwCreateTransaction chaque fois qu’un client de votre composant crée une transaction à l’aide de l’interface cliente de votre composant.

  3. Appelez ZwCreateEnlistment, en définissant l’indicateur ENLISTMENT_SUPERIOR et en spécifiant les indicateurs d’accès ENLISTMENT_SUPERIOR_RIGHTS et ENLISTMENT_SUBORDINATE_RIGHTS.

  4. Appelez ZwPrePrepareEnlistment, ZwPrepareEnlistment et ZwCommitEnlistment lorsque le client de votre composant appelle l’interface cliente de votre composant pour valider la transaction.

KTM n’autorise qu’un seul enrôlement supérieur par transaction. D’autres gestionnaires de ressources peuvent créer des inscriptions supplémentaires. Ces inscriptions sont appelées inscriptions subordonnées , car elles ne peuvent pas lancer l’opération de validation.

Pour annuler une inscription supérieure, votre gestionnaire de transactions supérieur appelle ZwRollbackEnlistment.

Pour récupérer une inscription supérieure, votre gestionnaire de transactions supérieur appelle ZwRecoverEnlistment.

Lorsqu’un gestionnaire de transactions supérieur valide, restaure ou récupère une transaction, KTM envoie des notifications de transaction à tous les enrôlements subordonnés afin qu’ils puissent participer.

Un TPS qui inclut un gestionnaire de transactions supérieur ne peut pas utiliser d’opérations de validation en une seule phase.

Pendant une opération de récupération, si KTM ne peut pas déterminer le résultat d’une transaction, elle envoie une notification TRANSACTION_NOTIFY_RECOVER_QUERY au gestionnaire de transactions supérieur. En réponse, le gestionnaire de transactions supérieur doit appeler ZwCommitEnlistment si la transaction peut être validée ou ZwRollbackEnlistment si la transaction doit être restaurée. Si le gestionnaire de transactions supérieur ne peut pas déterminer le résultat d’une transaction, il ne doit pas répondre à la notification TRANSACTION_NOTIFY_RECOVER_QUERY tant qu’il ne peut pas déterminer un résultat.