Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
KTM udostępnia kolejkę powiadomień dla każdego menedżera zasobów. KTM dostarcza powiadomienia do menedżera zasobów, umieszczając je w jego kolejce.
Menedżer zasobów może pobierać powiadomienia z kolejki synchronicznie lub asynchronicznie.
Aby pobrać powiadomienia synchronicznie, menedżer zasobów może wielokrotnie wywoływać element ZwGetNotificationResourceManager.
Aby otrzymywać powiadomienia asynchronicznie, menedżer zasobów może wywołać funkcję TmEnableCallbacks w celu skonfigurowania procedury wywołania zwrotnego. KTM wywołuje procedurę wywołania zwrotnego za każdym razem, gdy umieszcza powiadomienie w kolejce menedżera zasobów.
Gdy menedżer zasobów wywołuje aplikację ZwCreateEnlistment w celu utworzenia rejestracji dla transakcji, menedżer zasobów określa typy powiadomień, które powinny zostać odebrane. Menedżerowie zasobów otrzymują tylko powiadomienia, które zarejestrują, aby otrzymywać.
Stałe powiadomień są definiowane w pliku Ktmtypes.h. Nazwy stałych powiadomień mają format TRANSACTION_NOTIFY_Xxx.
W pozostałej części tego tematu wymieniono wszystkie stałe powiadomień, które definiuje Ktmtypes.h i dzieli je na trzy grupy:
Powiadomienia, które mogą otrzymywać menedżerowie zasobów
Powiadomienia, które mogą otrzymywać nadrzędni menedżerowie transakcji
Stałe powiadomień, które są zdefiniowane, ale obecnie nie są używane
Powiadomienia dotyczące menedżerów zasobów
Wszyscy menedżerowie zasobów muszą zarejestrować się, aby otrzymywać powiadomienia TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE i TRANSACTION_NOTIFY_COMMIT, nawet jeśli następnie wywołają funkcję ZwReadOnlyEnlistment, aby oznaczyć uczestnictwo jako 'tylko do odczytu'.
Menedżerowie zasobów mogą obsługiwać TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, ale muszą również obsługiwać wielofazowe powiadomienia pre-przygotowawcze, przygotowawcze i zatwierdzające.
Poniższa lista zawiera wszystkie powiadomienia, które mogą otrzymywać menedżerowie zasobów:
TRANSACTION_NOTIFY_PREPREPARE
Po wysłaniu: klient wywołuje ZwCommitTransaction i brak jest menedżerów zasobów obsługujących zatwierdzanie jednofazowe, lub jeśli nadrzędny menedżer transakcji wywołuje ZwPrePrepareEnlistment.
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja adresata: wykonaj operacje wstępnego przygotowania, a następnie wywołaj metodę ZwPrePrepareComplete. (Aby uzyskać więcej informacji na temat operacji przygotowywania wstępnego, zobacz Obsługa operacji zatwierdzania).
Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPARE i TRANSACTION_NOTIFY_COMMIT.
POWIADOMIENIE_O_TRANSAKCJI_PRZYGOTOWANIE
Kiedy wysłane: Po TRANSACTION_NOTIFY_PREPREPARE, jeśli klient wywołuje ZwCommitTransaction i żaden menedżer zasobów nie obsługuje zatwierdzania jednofazowego, lub jeśli nadrzędny menedżer transakcji wywołuje ZwPrepareEnlistment.
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja odbiorcy: Wykonaj operacje przygotowywania, a następnie wywołaj metodę ZwPrepareComplete. (Aby uzyskać więcej informacji na temat operacji przygotowawczych, zobacz Obsługa operacji zatwierdzania).
Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPREPARE i TRANSACTION_NOTIFY_COMMIT.
POWIADOMIENIE_O_ZATWIERDZENIU_TRANSAKCJI
Po wysłaniu: po TRANSACTION_NOTIFY_PREPARE, jeśli klient wywołuje polecenie ZwCommitTransaction i żaden menedżer zasobów nie obsługuje zatwierdzania jednofazowego lub jeśli lepszy menedżer transakcji wywołuje ZwCommitEnlistment.
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja adresata: wykonaj operacje zatwierdzania, a następnie wywołaj polecenie ZwCommitComplete. (Aby uzyskać więcej informacji na temat operacji zatwierdzania, zobacz Obsługa operacji zatwierdzania).
Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPREPARE i TRANSACTION_NOTIFY_PREPARE.
TRANSAKCJA_POWIADOM_JEDNOFAZOWA_KOMITACJA
Gdy zostanie wysłane: klient wywołuje ZwCommitTransaction, a menedżer zasobów obsługuje operacje zatwierdzania jednofazowego.
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja adresata: zatwierdź transakcję lub wywołaj metodę ZwSinglePhaseReject. (Aby uzyskać więcej informacji na temat operacji zatwierdzania jednofazowego, zobacz Obsługa operacji zatwierdzania).
Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE i TRANSACTION_NOTIFY_COMMIT.
TRANSACTION_NOTIFY_ROLLBACK
Po przesłaniu: klient wywołuje ZwRollbackTransaction, nadrzędny menedżer transakcji wywołuje ZwRollbackEnlistment lub KTM wykrywa błąd (na przykład błąd zapisu w strumieniu dziennika).
Odebrane przez: Zarówno menedżerów zasobów, jak i nadrzędnych menedżerów transakcji.
Wymagana akcja odbiorcy: wykonaj wszystkie operacje potrzebne do wycofania danych transakcji, a następnie wywołaj metodę ZwRollbackComplete. (Aby uzyskać więcej informacji na temat operacji wycofywania, zobacz Obsługa operacji wycofywania).
Ograniczenia: Wszyscy menedżerowie zasobów i menedżerowie transakcji najwyższej jakości muszą obsługiwać TRANSACTION_NOTIFY_ROLLBACK.
TRANSACTION_NOTIFY_RECOVER
Po wysłaniu: menedżer zasobów wywołuje ZwRecoverResourceManager.
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja adresata: Menedżer zasobów musi wywołać metodę ZwRecoverEnlistment. (Aby uzyskać więcej informacji na temat operacji odzyskiwania, zobacz Obsługa operacji odzyskiwania).
Ograniczenia: Żaden.
TRANSACTION_NOTIFY_LAST_RECOVER
Po wysłaniu: Po tym, jak KTM wyśle ostatni TRANSACTION_NOTIFY_RECOVER dla zgłoszeń menedżera zasobów.
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja adresata: zakończ operację odzyskiwania. (Aby uzyskać więcej informacji na temat operacji odzyskiwania, zobacz Obsługa operacji odzyskiwania).
Ograniczenia: Żaden.
TRANSACTION_NOTIFY_INDOUBT
Po wysłaniu: po wywołaniu menedżera zasobów ZwRecoverEnlistment, jeśli KTM nie może określić, czy transakcja powinna zostać zatwierdzona lub wycofana (zazwyczaj dlatego, że tpS ma nadrzędnego menedżera transakcji, który jest niedostępny).
Odebrane przez: Menedżerowie zasobów.
Wymagana akcja adresata: nie rób nic, dopóki KTM nie wyśle TRANSACTION_NOTIFY_COMMIT lub TRANSACTION_NOTIFY_ROLLBACK.
Ograniczenia: Żaden.
TRANSAKCJA_POWIADOMIENIE_RM_ODŁĄCZONY
Po wysłaniu: Menedżer zasobów obsługujący operację zatwierdzania jednofazowego zamyka dojście rejestracji bez wskazania, że transakcja została zatwierdzona lub wycofana.
Odebrane przez: Menedżerowie zasobów i nadrzędni menedżerowie transakcji, którzy mają zaangażowania w transakcji.
Wymagana akcja adresata: operacje oczyszczania specyficzne dla transakcji. Zazwyczaj to powiadomienie jest przydatne menedżerom zasobów o uprawnieniach tylko do odczytu.
Ograniczenia: Żaden.
Powiadomienia dla menedżerów transakcji Superior
Menedżerowie transakcji o najwyższej jakości mogą otrzymywać następujące powiadomienia:
TRANSACTION_NOTIFY_ROLLBACK
Zobacz wcześniejszy opis.
POWIADOMIENIE_O_TRANSAKCJI_RM_ODŁĄCZONY
Zobacz wcześniejszy opis.
TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Kiedy zostanie wysłany: Gdy wszyscy menedżerowie zasobów otrzymają TRANSACTION_NOTIFY_PREPREPARE i odpowiedzą poprzez wywołanie ZwPrePrepareComplete.
Odebrane przez: Przełożeni kierownicy ds. transakcji.
Wymagana akcja odbiorcy: nadrzędny menedżer transakcji powinien wywołać metodę ZwPrepareEnlistment.
TRANSACTION_NOTIFY_PREPARE_COMPLETE
Po wysłaniu: Gdy wszyscy menedżerowie zasobów otrzymali TRANSACTION_NOTIFY_PREPARE i odpowiedzieli, wywołując polecenie ZwPrepareComplete.
Odebrane przez: Przełożeni menedżerowie transakcji.
Wymagana akcja adresata: Przełożony menedżer transakcji powinien wywołać polecenie ZwCommitEnlistment.
POWIADOMIENIE_O_ZAKOŃCZENIU_ZATWIERDZANIA_TRANSAKCJI
Kiedy zostanie wysłany: Gdy wszyscy menedżerowie zasobów otrzymają TRANSACTION_NOTIFY_COMMIT i odpowiedzą, wywołując ZwCommitComplete.
Odebrane przez: Superior transaction managers.
Wymagana akcja adresata: Operacje oczyszczania transakcji.
TRANSAKCJA_POWIADOMIENIE_ROLBAK_ZAKOŃCZONY
Po wysłaniu: po tym, jak wszyscy menedżerowie zasobów otrzymają TRANSACTION_NOTIFY_ROLLBACK i odpowiedzą, wywołując ZwRollbackComplete.
Odebrane przez: Superior transaction managers.
Wymagana akcja adresata: Operacje oczyszczania transakcji.
TRANSACTION_NOTIFY_RECOVER_QUERY
Kiedy zostanie wysłane: Nadrzędny menedżer transakcji wywołuje ZwRecoverResourceManager.
Odebrane przez: Superior transaction managers.
Wymagana akcja adresata: Wyższy menedżer transakcji musi wywołać polecenie ZwCommitEnlistment lub ZwRollbackEnlistment dla rejestracji.
TRANSACTION_NOTIFY_COMMIT_REQUEST
Po wysłaniu: klient wywołuje element ZwCommitTransaction. Jeśli lepszy menedżer transakcji zarejestrował się na potrzeby tego powiadomienia o rejestracji, KTM wysyła TRANSACTION_NOTIFY_COMMIT_REQUEST do nadrzędnego menedżera transakcji zamiast wysyłania TRANSACTION_NOTIFY_COMMIT do menedżerów zasobów.
Odebrane przez: Superior transaction managers.
Wymagana akcja adresata: nadrzędny menedżer transakcji wywołuje ZwCommitEnlistment.
TRANSACTION_NOTIFY_REQUEST_OUTCOME
Po wysłaniu: menedżer zasobów wywołuje TmRequestOutcomeEnlistment, gdy transakcja jest w stanie przygotowania.
Odebrane przez: Superior transaction managers.
Wymagana akcja odbiorcy: Nadrzędny menedżer transakcji musi wywołać ZwCommitEnlistment lub ZwRollbackEnlistment.
Nieużywane powiadomienia
Następujące powiadomienia są zdefiniowane w pliku Ktmtypes.h, ale KTM obecnie ich nie obsługuje:
TRANSACTION_NOTIFY_DELEGATE_COMMIT
TRANSACTION_NOTIFY_ENLIST_MASK
TRANSACTION_NOTIFY_ENLIST_PREPREPARE
TRANSAKCJA_POWIADOMIENIE_MARSHAL
TRANSACTION_NOTIFY_PROMOTE
POWIADOMIENIE_O_TRANSAKCJI_PROMOCJA_NOWE
TRANSACTION_NOTIFY_PROPAGATE_PULL
TRANSACTION_NOTIFY_PROPAGATE_PUSH
TRANSACTION_NOTIFY_TM_ONLINE
TRANSACTION_NOTIFY_COMMIT_FINALIZE