Partager via


Écriture d’un Resource Manager

Si vous écrivez un service ou un composant et que vous devez utiliser des services transactionnels ou si vous devez surveiller l’état d’une transaction de noyau, vous devez créer un gestionnaire de ressources (RM).

Pour écrire un gestionnaire de ressources, vous devez créer plusieurs objets de noyau. Les objets qu’un RM utilise sont les suivants :

  • Objets Transaction Manager (TM)
  • objets Resource Manager
  • Objets d’inscription

Tout d’abord, créez un objet TM. Il existe deux types de machines virtuelles :

  • Volatile : ces machines virtuelles n’ont pas de journal et ne peuvent pas récupérer leur état
  • Durable : ces machines virtuelles ont un journal

Pour créer un tm durable, vous devez créer un journal CLFS et appeler CreateTransactionManager ou demander à KTM de le créer pour vous. Une fois qu’une tm durable a été créée, vous devez d’abord la récupérer en appelant RecoverTransactionManager. Une fois le TM récupéré, il est disponible pour utilisation.

Si vous avez récupéré une tm existante, toutes les machines virtuelles associées à cette tm commencent à recevoir des messages de récupération. Pour plus d’informations, consultez Traitement de récupération.

Ensuite, vous créez un gestionnaire de ressources en appelant CreateResourceManager avec le handle TM. Le RM peut être volatile ou durable. Seules les machines virtuelles durables peuvent être utilisées avec des machines virtuelles durables.

Lorsque vous travaillez sur le plan transactionnel, vous vous inscrivez dans la transaction en appelant CreateEnlistmentet en spécifiant les notifications à recevoir.

Note Vous pouvez commencer à recevoir des notifications avant la fin de l’appel à CreateEnlistment .

Lorsque vous recevez une notification, appelez la fonction « Complete* » appropriée lorsque tout travail associé au traitement de la notification est terminé. Les fonctions complètes sont les suivantes :

Si, à un moment quelconque, un gestionnaire de ressources ne parvient pas à terminer le travail de la transaction, ou si la poursuite rend votre application incapable d’annuler le travail effectué dans la transaction, vous devez restaurer la transaction en appelant RollbackEnlistment.