Odzyskiwanie systemu
Menedżer zasobów ułatwia rozwiązanie trwałych rejestracji w transakcji przez reenlisting uczestnika transakcji po awarii zasobu.
Proces odzyskiwania
Aby trwale zarejestrować zasób (opisany przez implementację interfejsu IEnlistmentNotification ), który może później kwalifikować się do odzyskiwania, należy wywołać metodę EnlistDurable . Ponadto należy podać EnlistDurable metody z identyfikatorem Menedżera zasobów ( Guid) używany do stale etykiety uczestnika transakcji w przypadku awarii zasobu. Z tego powodu Guid wywołanie początkowej listy enlist powinno być identyczne z parametrem resourceManagerIdentifier w wywołaniu Reenlist podczas odzyskiwania. W przeciwnym razie TransactionException 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 po zatwierdzeniu. Dostęp do rekordu przygotowywania można później uzyskać podczas odzyskiwania, pobierając RecoveryInformation właściwość wywołania zwrotnego prepareEnlistment . Rejestrowanie rekordu nie jest konieczne jest wykonywana w ramach Prepare metody jako Menedżera zasobów można to zrobić w wątku roboczego.
Proces odzyskiwania składa się z następujących dwóch kroków:
Krok 1 - ReEnlist
Menedżer zasobów sprawdza, czy prepare rekordu informacji dla każdej rejestracji, który jest w stanie wątPLiwości. Jest to wykonywane przez sprawdzenie RecoveryInformation właściwości PreparingEnlistment wywołanie zwrotne, które są przekazywane do Menedżera zasobów w Prepare powiadomień w fazie 1.
Dla każdego takiego rejestracji sprawdza, czy, wywołuje Reenlist na Menedżera transakcji. Ta metoda przekazuje unikatowego Guid określający Menedżera zasobów, a także informacje o rejestracji w tablicy bajtów. Nowy Enlistment obiekt jest zwracany. Jeśli ponownej rejestracji nie powiedzie się z powodu wyjątku ponowić próbę później, konieczne będzie Menedżera zasobów.
Należy wywołać tylko Reenlist metody po uruchomieniu Menedżera zasobów po awarii. Ponadto należy tylko reenlist rozwiązane transakcje zarejestrowane przez Menedżera zasobów w fazie przygotowania początkowego dwufazowego zatwierdzania. Każda próba wywołania tej metody w czasie nieprawidłowy może utworzyć błędnych wyników.
Gdy uczestnika, który jest reenlisted za pomocą tej metody, metody Faza 2 IEnlistmentNotification odpowiada wyniku transakcji (oznacza to, że Commit , Rollback lub InDoubt ) są nazywane odpowiednio.
Krok 2. Kończenie odzyskiwania
Po zakończeniu wszystkich reenlistments, Menedżer zasobów wywołuje RecoveryComplete metody. Ta metoda kończy odzyskiwanie i informuje menedżera transakcji, że menedżer zasobów nie ma więcej wątpliwych transakcji. W ten sposób Menedżera zasobów gwarantuje, że nie będzie wywołania Reenlist ponownie metodą.
Menedżer zasobów nie jest wymagana, aby usunąć wszystkie transakcje w stanie wątPLiwości przed rejestrowanie w nowych transakcji. Pierwszy krok można wykonać w dowolnym momencie po ustanowieniu przez menedżera zasobów relacji z menedżerem transakcji, ale po RecoveryComplete wywołaniu (krok 2); krok 1 nie można wykonać ponownie. Krok 2 może być powtarzany wiele razy bez wpływu na wynik transakcji.