Udostępnij przez


Wykonywanie naprawy

Menedżer zasobów ułatwia rozwiązywanie trwałych zgłoszeń w transakcji przez ponowne zapisanie uczestnika transakcji w przypadku awarii zasobu.

Proces odzyskiwania

Aby na stałe zarejestrować zasób (opisany przez implementację interfejsu IEnlistmentNotification), który potem może być kwalifikowany do odzyskiwania, należy wywołać metodę EnlistDurable. Ponadto należy podać metodę EnlistDurable z identyfikatorem menedżera zasobów (a Guid), który jest używany do spójnego oznaczania uczestnika transakcji w przypadku awarii zasobu. Z tego powodu wywołanie początkowe Guid, które jest przekazywane, powinno być identyczne z parametrem resourceManagerIdentifier w wywołaniu Reenlist podczas odzyskiwania. TransactionException W przeciwnym razie jest zgłaszany. Aby uzyskać więcej informacji na temat trwałych rejestracji, zobacz Rejestrowanie zasobów jako uczestników transakcji.

W fazie przygotowywania (faza 1) protokołu 2PC, gdy implementacja trwałego menedżera zasobów odbiera Prepare powiadomienie, powinna rejestrować swój rekord przygotowywania w tej fazie. Rekord powinien zawierać wszystkie informacje niezbędne do ukończenia transakcji w momencie zatwierdzenia. Dostęp do rekordu przygotowywania można uzyskać później podczas procesu odzyskiwania, pobierając RecoveryInformation właściwość wywołania zwrotnego prepareEnlistment. Rejestrowanie rekordów nie musi być wykonywane w metodzie Prepare, ponieważ narzędzie RM może to zrobić w wątku roboczym.

Proces odzyskiwania składa się z następujących dwóch kroków:

Krok 1 - Ponowne zaciągnięcie się

Menedżer zasobów analizuje zbiór informacji przygotowawczych dla każdego zgłoszenia, które jest niepewne. W tym celu należy zbadać właściwość RecoveryInformation wywołania zwrotnego PreparingEnlistment, która jest przekazywana do menedżera zasobów w Prepare w powiadomieniu podczas fazy 1.

Dla każdej takiej rejestracji sprawdza, wywołując Reenlist na menedżerze transakcji. Ta metoda przekazuje unikatowy identyfikator Guid , który identyfikuje menedżera zasobów, a także informacje o rejestracji w tablicy bajtów. Zwracany jest nowy Enlistment obiekt. Jeśli ponowne przyłączenie się nie powiedzie się z powodu wyjątku, menedżer zasobów będzie musiał spróbować ponownie później.

Należy wywołać metodę Reenlist tylko wtedy, gdy menedżer zasobów ponownie uruchomi się po awarii. Ponadto należy tylko ponownie zarejestrować nierozstrzygnięte transakcje zarejestrowane przez menedżera zasobów w początkowej fazie przygotowawczej dwufazowego zatwierdzenia. Każda próba wywołania tej metody w nieprawidłowych momentach może spowodować błędne wyniki.

Gdy uczestnik zostanie ponownie zarejestrowany przy użyciu tej metody, odpowiednie metody fazy 2 IEnlistmentNotification, które odpowiadają wynikowi transakcji (czyli Commit, Rollback lub InDoubt), są wywoływane.

Krok 2: Proces zakończenia odzyskiwania

Po zakończeniu wszystkich ponownych zaciągnięć menedżer zasobów wywołuje metodę RecoveryComplete. Ta metoda kończy odzyskiwanie i informuje menedżera transakcji, że menedżer zasobów nie ma więcej wątpliwych transakcji. Dzięki temu menedżer zasobów gwarantuje, że nie wywoła metody Reenlist ponownie.

Menedżer zasobów nie jest wymagany do rozwiązania wszystkich wątpliwych transakcji przed zalogowaniem się do nowych transakcji. Pierwszy krok można wykonać w dowolnym momencie po tym, jak menedżer zasobów nawiąże relację z menedżerem transakcji, ale dopiero po wywołaniu RecoveryComplete (krok 2); kroku 1 nie można wykonać ponownie. Krok 2 może być powtarzany wiele razy bez wpływu na wynik transakcji.