Herstel uitvoeren
Een resourcemanager vereenvoudigt het oplossen van duurzame opname in een transactie door de transactiedeelnemer opnieuw in te schakelen na een resourcefout.
Het herstelproces
Als u een resource (beschreven door een implementatie van de IEnlistmentNotification interface) wilt opnemen die later in aanmerking kan komen voor herstel, moet u de EnlistDurable methode aanroepen. Daarnaast moet u de EnlistDurable methode opgeven met een Resource Manager-id (a Guid) die wordt gebruikt om de deelnemer van de transactie consistent te labelen in het geval van een resourcefout. Daarom moet de Guid initiƫle aanroep Enlist identiek zijn aan de parameter resourceManagerIdentifier in de aanroep tijdens het Reenlist herstel. Anders wordt TransactionException er gegooid. Zie Voor meer informatie over duurzame opname resources als deelnemers aan een transactie.
In de voorbereidingsfase (fase 1) van het 2PC-protocol, wanneer uw implementatie van een duurzame resourcemanager de Prepare melding ontvangt, moet deze de voorbereidingsrecord registreren tijdens deze fase. De record moet alle informatie bevatten die nodig is om de transactie bij doorvoer te voltooien. De voorbereidingsrecord kan later worden geopend tijdens het herstel door de RecoveryInformation eigenschap van de callback van prepareEnlistment op te halen. De recordlogboekregistratie hoeft niet binnen de Prepare methode te worden uitgevoerd, omdat de RM dit kan doen op een werkrolthread.
Het herstelproces bestaat uit de volgende twee stappen:
Stap 1: Opnieuw in lijst
De resourcemanager onderzoekt de informatierecord voor voorbereiden voor elke insluiting die twijfelachtig is. Dit wordt gedaan door de RecoveryInformation eigenschap van de PreparingEnlistment callback te onderzoeken, die tijdens fase 1 wordt doorgegeven aan de resourcemanager in de Prepare melding.
Voor elke dergelijke insluiting die wordt onderzocht, wordt het aangeroepen Reenlist op de transactiebeheerder. Deze methode geeft een unieke Guid door die de resourcemanager identificeert, evenals de gegevens van de insluiting in een bytematrix. Er wordt een nieuw Enlistment object geretourneerd. Als de herlisting mislukt met een uitzondering, moet de resourcemanager het later opnieuw proberen.
U moet de Reenlist methode alleen aanroepen wanneer een Resource Manager opnieuw wordt opgestart na een fout. Bovendien moet u alleen niet-opgeloste transacties die zijn vastgelegd door een resourcemanager opnieuw opnemen tijdens de eerste voorbereidingsfase van een doorvoer in twee fasen. Elke poging om deze methode op ongeldige tijden aan te roepen, kan onjuiste resultaten opleveren.
Wanneer een deelnemer opnieuw wordt ingelijst met behulp van deze methode, worden de methoden voor fase 2 die overeenkomen met het resultaat van IEnlistmentNotification de transactie (dat wil Commit gezegd, Rollback of InDoubt ) zo nodig aangeroepen.
Stap 2: het herstel voltooien
Wanneer alle nieuwe aanmeldgegevens zijn voltooid, roept de resourcemanager de RecoveryComplete methode aan. Deze methode voltooit het herstel en informeert de transactiebeheerder dat de resourcemanager geen twijfel meer heeft over transacties. Hierdoor garandeert de resourcemanager dat de Reenlist methode niet opnieuw wordt aangeroepen.
Een resourcemanager is niet vereist om alle in-twijfeltransacties op te lossen voordat ze in nieuwe transacties worden opgenomen. De eerste stap kan op elk gewenst moment worden uitgevoerd nadat de resourcemanager een relatie tot stand heeft gebracht met de transactiebeheerder, maar nadat RecoveryComplete deze is aangeroepen (stap 2); stap 1 kan niet opnieuw worden uitgevoerd. Stap 2 kan meerdere keren worden herhaald zonder dat dit van invloed is op het resultaat van transacties.