Provedení obnovení

Správce prostředků usnadňuje řešení trvalých zařazení v transakci opětovným zařazením účastníka transakce po selhání prostředku.

Proces obnovení

Chcete-li trvale zajistit prostředek (popsaný implementací IEnlistmentNotification rozhraní), který může být později vhodný k obnovení, měli byste zavolat metodu EnlistDurable. Kromě toho je nutné zadat metodu EnlistDurable s identifikátorem Resource Manageru (a Guid), který se používá k konzistentnímu označení účastníka transakce v případě selhání prostředku. Z tohoto důvodu by zadaný objekt v počátečním volání Enlist měl být totožný s parametrem Guid ve volání během obnovy. V opačném případě dojde k vyvolání TransactionException. Další informace o trvalých zařazeních naleznete v tématu Zařazení prostředků jako účastníci v transakci.

Ve fázi přípravy (fáze 1) protokolu 2PC, když vaše implementace správce trvalých prostředků obdrží Prepare oznámení, měl by protokolovat svůj záznam přípravy během této fáze. Záznam by měl obsahovat všechny informace, které jsou nezbytné k dokončení transakce při potvrzení. K přípravnému záznamu lze později získat přístup během obnovení načtením RecoveryInformation() vlastnosti zpětného volání preparingEnlistment. Protokolování záznamů není nutné provádět v metodě Prepare, protože to může RM udělat na pracovním vlákně.

Proces obnovení se skládá z následujících dvou kroků:

Krok 1 – Znovupřihlášení

Správce prostředků zkoumá přípravný informační záznam pro každé zařazení, které je sporné. To se provádí prozkoumáním vlastnosti zpětného volání RecoveryInformation(), která se předá správci prostředků v oznámení PreparingEnlistment během fáze 1.

Pro každé takové zařazení, které zkoumá, vyvolá Reenlist u správce transakcí. Tato metoda předá jedinečný Guid identifikátor správce prostředků, jakož i informace o registraci v bajtovém poli. Vrátí se nový Enlistment objekt. Pokud opětovné zařazení selže s výjimkou, správce prostředků bude muset akci opakovat později.

Metodu Reenlist byste měli volat pouze v případě, že se Správce prostředků restartuje z selhání. Kromě toho byste měli znovu vytvořit seznam nevyřešených transakcí protokolovaných správcem prostředků během počáteční fáze přípravy dvoufázového potvrzení. Jakýkoli pokus o volání této metody v neplatných časech může vést k chybným výsledkům.

Pokud je účastník znovu zařazený pomocí této metody, metody fáze 2 IEnlistmentNotification, které odpovídají výsledku transakce (tj. Commit, Rollback nebo InDoubt), se volají podle potřeby.

Krok 2 – dokončení obnovení

Po dokončení všech znovu přihlášení volá správce prostředků metodu RecoveryComplete. Tato metoda dokončí obnovení a informuje správce transakcí, že správce prostředků nemá žádné další transakce v pochybnosti. Tím správce prostředků zaručuje, že metodu Reenlist znovu nevyvolá.

Správce prostředků nemusí před zařazením do nových transakcí vyřešit všechny transakce v pochybnosti. První krok lze provést kdykoli poté, co správce prostředků vytvoří relaci se správcem transakcí, ale po RecoveryComplete vyvolání (krok 2), krok 1 nelze provést znovu. Krok 2 se může opakovat vícekrát, aniž by to ovlivnilo výsledek transakcí.