Udostępnij przez


Tworzenie nadrzędnego menedżera transakcji

W KTM, superior transaction manager jest menedżerem zasobów, który tworzy doskonałe rejestracje dla transakcji, w których uczestniczy. rejestracja nadrzędna jest rejestracją, która przyznaje menedżerowi zasobów możliwość koordynowania operacji zatwierdzania dla transakcji związanej z rejestracją. Innymi słowy, albo klient transakcyjny, albo nadrzędny menedżer transakcji może uruchomić sekwencję przygotowanie wstępne/przygotowanie/zatwierdzenie transakcji.

Po utworzeniu lepszej rejestracji dla transakcji, menedżer zasobów KTM odrzuca wszystkie wywołania ZwCommitTransaction dla transakcji. W związku z tym klienci transakcyjni nie mogą zatwierdzić takiej transakcji. Zamiast tego menedżer zasobów, który utworzył nadrzędne zgłoszenie, musi wywołać ZwPrePrepareEnlistment, ZwPrepareEnlistmenti ZwCommitEnlistment.

Kiedy utworzyć menedżera transakcji o najwyższej jakości

Załóżmy, że chcesz zintegrować składnik systemu przetwarzania transakcji (TPS) z KTM, ale składnik zawiera własne możliwości zarządzania transakcjami innych niż KTM, które klienci mogą wywoływać. W takiej sytuacji może być konieczne utworzenie doskonałego menedżera transakcji.

Załóżmy na przykład, że składnik udostępnia własne interfejsy używane przez klientów do tworzenia i zatwierdzania transakcji. Ponieważ klienci składnika nie wywołują KTM w celu utworzenia lub zatwierdzenia transakcji, składnik musi stać się nadrzędnym menedżerem transakcji podczas integrowania go z systemem TPS opartym na KTM.

Jak stworzyć doskonałego menedżera transakcji

Jeśli chcesz, aby składnik był lepszym menedżerem transakcji, należy wykonać następujące czynności:

  1. Wywołaj ZwCreateResourceManager, aby zarejestrować się jako menedżer zasobów.

  2. Wywołaj ZwCreateTransaction za każdym razem, gdy klient składnika tworzy transakcję przy użyciu interfejsu klienta składnika.

  3. Wywołaj ZwCreateEnlistment, ustawiając flagę ENLISTMENT_SUPERIOR i określając flagi dostępu ENLISTMENT_SUPERIOR_RIGHTS i ENLISTMENT_SUBORDINATE_RIGHTS.

  4. Wywołaj ZwPrePrepareEnlistment, ZwPrepareEnlistmenti ZwCommitEnlistment, gdy klient komponentu wywołuje interfejs klienta komponentu w celu zatwierdzenia transakcji.

KTM zezwala tylko na jedną nadrzędną rejestrację na transakcję. Inni menedżerowie zasobów mogą tworzyć dodatkowe rejestracje. Te rejestracje są nazywane podrzędnymi rejestracjami, ponieważ nie mogą zainicjować operacji zatwierdzania.

Aby wycofać rejestrację prowadzoną przez przełożonego, twój przełożony menedżer transakcji wywołuje ZwRollbackEnlistment.

Aby odzyskać wyższą rejestrację, twój nadrzędny menedżer transakcji wywołuje ZwRecoverEnlistment.

Gdy nadrzędny menedżer transakcji zatwierdza, cofa lub odzyskuje transakcję, KTM wysyła powiadomień o transakcji do wszystkich podrzędnych uczestników, aby mogły one uczestniczyć.

Moduł TPS, który zawiera lepszego menedżera transakcji, nie może używać operacji jednofazowego zatwierdzania .

Podczas operacji odzyskiwania, jeśli KTM nie może określić wyniku transakcji, wysyła TRANSACTION_NOTIFY_RECOVER_QUERY powiadomienie do nadrzędnego menedżera transakcji. W odpowiedzi przełożony menedżer transakcji musi wywołać ZwCommitEnlistment, jeśli transakcja może zostać zatwierdzona lub ZwRollbackEnlistment, jeśli transakcja powinna zostać wycofana. Jeśli przełożony menedżer transakcji nie może określić wyniku transakcji, nie powinien odpowiadać na powiadomienie TRANSACTION_NOTIFY_RECOVER_QUERY, dopóki nie będzie mógł określić wyniku.