Partager via


Exécution de la récupération

Un gestionnaire de ressources facilite la résolution d’inscriptions durables à une transaction en réinscrivant le participant à la transaction après défaillance de la ressource.

Processus de récupération

Pour procéder à l'inscription durable d'une ressource (décrite par implémentation de l'interface IEnlistmentNotification) pouvant être utilisée pour une éventuelle récupération, appelez la méthode EnlistDurable. Vous devez également communiquer à la méthode EnlistDurable l'identificateur d'un gestionnaire de ressources (un Guid) utilisé pour identifier systématiquement le participant à la transaction en cas de défaillance de la ressource. Le Guid fourni lors de l’appel d’inscription initial doit donc correspondre au paramètre resourceManagerIdentifier utilisé pour l’appel Reenlist lors de la récupération. sous peine de lever une exception TransactionException. Pour plus d’informations sur les inscriptions durables, consultez Inscription de ressources comme participants à une transaction.

Au cours de la phase de préparation (phase 1) du protocole 2PC, lorsque l'implémentation du gestionnaire de ressources durables reçoit la notification Prepare, elle doit consigner son enregistrement de préparation. L'enregistrement doit contenir toutes les informations nécessaires pour terminer la transaction en cours de validation. Il est ensuite possible d’accéder à l’enregistrement de préparation lors de la récupération, en extrayant la propriété RecoveryInformation du rappel preparingEnlistment. Il n'est pas nécessaire d'effectuer la journalisation de l'enregistrement au sein de la méthode Prepare puisque le gestionnaire de ressources peut le faire au niveau d'un thread de travail.

Le processus de récupération se divise en deux étapes :

Étape 1 : Réinscription

Le gestionnaire de ressources examine l'enregistrement d'informations de préparation de chaque inscription incertaine. Cette opération se traduit par l'examen de la propriété RecoveryInformation du rappel PreparingEnlistment, passée au gestionnaire de ressources dans la notification Prepare au cours de la phase 1.

Pour chaque inscription examinée, il appelle Reenlist sur le gestionnaire de transactions. Cette méthode passe le Guid unique qui permet d'identifier le gestionnaire de ressources, ainsi que les informations d'inscription dans un tableau d'octets. Un nouvel objet Enlistment est retourné. Si la réinscription échoue avec une exception, le gestionnaire de ressources doit retenter ultérieurement.

N'appelez la méthode Reenlist que lors du redémarrage d'un gestionnaire de ressources après défaillance. En outre, vous ne devez réinscrire que des transactions non résolues enregistrées par un gestionnaire de ressources au cours de la phase de préparation initiale d'une validation en deux phases. Toute tentative pour appeler cette méthode à une période incorrecte peut entraîner des résultats erronés.

Lorsqu’un participant est réinscrit à l’aide de cette méthode, les méthodes de phase 2 de IEnlistmentNotification qui correspondent au résultat de la transaction (soit Commit, Rollback ou InDoubt) sont appelées si nécessaire.

Étape 2 : Fin de la récupération

Une fois toutes les réinscriptions effectuées, le gestionnaire des ressources appelle la méthode RecoveryComplete. Cette méthode termine la récupération et informe le gestionnaire de transactions que le gestionnaire de ressources ne présente plus de transactions incertaines. Cela permet d'éviter que le gestionnaire de ressources ne rappelle la méthode Reenlist.

Il n'est pas nécessaire que le gestionnaire de ressources ait résolu toutes les transactions incertaines avant de procéder aux inscriptions à de nouvelles transactions. Une fois que le gestionnaire de ressources a établi une relation avec le gestionnaire de transactions, vous pouvez effectuer la première étape à n’importe quel moment, mais après l’appel à RecoveryComplete (étape 2) ; il devient impossible de procéder à nouveau à l’étape 1. L'étape 2 peut être répétée plusieurs fois sans affecter le résultat des transactions.