Udostępnij przez


Tworzenie klienta transakcyjnego

Klient transakcyjny jest składnikiem systemu przetwarzania transakcji (TPS), który używa wyeksportowanego interfejsu menedżera zasobów w celu uzyskania dostępu do zasobu, takiego jak baza danych, którą obsługuje menedżer zasobów.

Zazwyczaj klient tworzy transakcję, wykonuje zestaw operacji bazy danych, a następnie zatwierdza transakcję, aby operacje stawały się trwałe. Jeśli klient napotka błąd, może wycofać transakcję, aby usunąć operacje transakcji zamiast zatwierdzać transakcję.

Zazwyczaj klient transakcyjny korzystający z KTM w trybie jądra musi wykonywać następujące zadania dla każdej transakcji:

  1. Utwórz obiekt transakcji.

    Wywołanie funkcji ZwCreateTransaction tworzy obiekt transakcji, zapewnia dojście obiektu i przypisuje identyfikator obiektu (identyfikator GUID), który klient może przekazać do menedżera zasobów w celu zidentyfikowania transakcji.

  2. Uzyskaj identyfikator obiektu transakcji.

    Aby uzyskać identyfikator obiektu, klient może wywołać element ZwQueryInformationTransaction .

  3. Przekaż identyfikator obiektu transakcji do menedżera zasobów.

    Klient zazwyczaj wywołuje wyeksportowany interfejs menedżera zasobów, aby otworzyć ścieżkę komunikacji do menedżera zasobów i skojarzyć ścieżkę z transakcją. Na przykład menedżer zasobów może podać procedurę CreateDataObject podobną do procedury opisanej w temacie Understanding TPS Components (Opis składników modułu TPS ).

  4. Wykonaj operacje, które mają zostać uwzględnione w transakcji.

    Zazwyczaj klient wywołuje interfejs menedżera zasobów w celu uzyskania dostępu do zasobu menedżera zasobów. Na przykład klient menedżera bazy danych może odczytywać i zapisywać w bazie danych.

  5. Zatwierdź lub wycofaj transakcję.

    Jeśli wszystkie operacje zasobów zakończą się powodzeniem, klient musi wywołać funkcję ZwCommitTransaction, aby operacje stały się trwałe. Jeśli operacja zakończy się niepowodzeniem, klient musi wywołać element ZwRollbackTransaction zamiast ZwCommitTransaction. Jeśli na przykład klient menedżera bazy danych ustali, że jedna z serii operacji zapisu nie powiodła się, klient musi wywołać funkcję ZwRollbackTransaction , aby żadna z operacji zapisu nie stała się trwała.

    Klienci mogą wywoływać operacje ZwCommitTransaction i ZwRollbackTransaction synchronicznie lub asynchronicznie. Jeśli klienci wywołają te procedury synchronicznie, procedury nie są zwracane do momentu ukończenia operacji zatwierdzania lub wycofywania.

    Aby uzyskać więcej informacji na temat zatwierdzania i wycofywania transakcji, zobacz Obsługa operacji transakcji.

  6. Zamknij uchwyt obiektu transakcji.

    Po zakończeniu przetwarzania transakcji klient musi wywołać funkcję ZwClose , aby zamknąć dojście obiektu transakcji

Moduł TPS może zawierać więcej niż jednego menedżera zasobów. Jeśli transakcja klienta obejmuje operacje na wielu zasobach, takie jak dwie bazy danych obsługiwane przez dwóch menedżerów zasobów, klient zazwyczaj wykonuje następujące czynności:

  1. Tworzy pojedynczy obiekt transakcji dla każdej transakcji.

  2. Przekazuje identyfikator obiektu transakcji do każdego menedżera zasobów.

  3. Wykonuje operacje na każdej bazie danych przez wywołanie interfejsu menedżera zasobów.

  4. Zatwierdza transakcję, jeśli wszystkie operacje zakończyły się bez błędów, lub cofa transakcję, jeśli wykryto błąd.

Jeśli moduł TPS zawiera wyższego menedżera transakcji, klienci transakcyjni zazwyczaj nie używają KTM. Aby uzyskać więcej informacji na temat najlepszych menedżerów transakcji i ich klientów, zobacz Creating a Superior Transaction Manager (Tworzenie doskonałego menedżera transakcji).

Klienci transakcyjni mogą wywoływać funkcję ZwSetInformationTransaction , aby ustawić informacje specyficzne dla transakcji. Na przykład klient może ustawić wartość limitu czasu dla transakcji lub podać opisowy ciąg znaków. Klienci mogą wywołać funkcję ZwQueryInformationTransaction , aby pobrać informacje o transakcji. Na przykład klient może wywołać tę procedurę, aby określić, czy transakcja została zatwierdzona, czy wycofana.