Udostępnij za pośrednictwem


Konfigurowanie transakcji

Atrybut transakcji jest deklaratywną właściwością, która automatycznie zarządza transakcjami dla twórcy komponentów. Ustawiając ten atrybut, należy wyeliminować konieczność używania jawnych kontrolek transakcji w składniku.

Com+ używa atrybutu transakcji składnika do określenia typu ochrony transakcji wymaganej dla każdego obiektu, który aktywuje. W zależności od wymagań obiekt może współużytkować transakcję obiektu wywołującego, wymagać nowej transakcji lub działać bez ochrony transakcji.

Com+ udostępnia następujące wartości atrybutów transakcji:

wyłączone

Ogólnie rzecz biorąc, należy ustawić tę wartość atrybutu tylko wtedy, gdy masz pewność, że składnik nigdy nie uzyskuje dostępu do menedżera zasobów. Po wyłączeniu atrybutu transakcji COM+ ignoruje wymagania transakcyjne składnika podczas określania umieszczania kontekstu obiektu. W związku z tym obiekt może współużytkować kontekst obiektu wywołującego (i transakcję). Podczas migracji składnika COM+do modelu COM+należy wyłączyć atrybut transakcji, aby zachować to samo zachowanie transakcyjne co nieskonfigurowany składnik COM.

Notatka

Nieskonfigurowany składnik to składnik COM, który nie jest zainstalowany w aplikacji COM+.

Nieobsługiwane

Po ustawieniu tej wartości atrybutu COM+ gwarantuje, że każdy obiekt utworzony na podstawie składnika nigdy nie uczestniczy w transakcji, niezależnie od stanu transakcyjnego jego obiektu wywołującego. Deklarując tę wartość, zapewniasz, że obiekt nie głosuje w transakcji wywołującego ani nie może rozpocząć własnej transakcji. Nieobsługiwane jest wartością domyślną dla wszystkich składników.

Obsługiwane

Po ustawieniu tej wartości atrybutu COM+ gwarantuje, że każdy obiekt utworzony na podstawie składnika uczestniczy w transakcji, jeśli istnieje. Zadeklaruj tę wartość, gdy chcesz, aby obiekt uczestniczył w transakcji swojego wywołującego, nie wymagając przy tym posiadania własnej transakcji.

wymagane

Po ustawieniu tej wartości atrybutu com+ gwarantuje, że każdy obiekt utworzony na podstawie składnika jest transakcyjny. Gdy COM+ aktywuje obiekt z ustawieniem Wymagane, sprawdza stan transakcji jego wywołującego. Jeśli obiekt wywołujący ma transakcję, nowy obiekt jest uwzględniony w bieżącej transakcji. W przeciwnym razie COM+ rozpoczyna transakcję, czyniąc nowy obiekt korzeniem transakcji. Jest to preferowane ustawienie dla składnika, który wykonuje działania zasobów, ponieważ pomaga zapewnić ochronę transakcji dla tych działań.

wymaga nowego

Po ustawieniu tej wartości atrybutu COM+ gwarantuje, że wszystkie obiekty utworzone na podstawie składnika muszą uczestniczyć w nowej transakcji jako korzeń transakcji, niezależnie od stanu transakcyjnego obiektu wywołującego. Com+ automatycznie inicjuje nową transakcję, która różni się od transakcji obiektu wywołującego.

Notatka

COM+ nie obsługuje zagnieżdżonych transakcji. Gdy jeden obiekt transakcyjny wywołuje inny składnik oznaczony jako Requires New, COM+ tworzy niezależną granicę transakcyjną dla nowo aktywowanego obiektu. Druga transakcja nie może mieć wpływu na pierwszą transakcję, chyba że pierwsza transakcja jawnie zanotuje wyniki drugiej transakcji i modyfikuje głosowanie na podstawie tych wyników.

Zależności atrybutów transakcji

W poniższej tabeli przedstawiono charakterystykę każdej wartości atrybutu transakcji COM+, w tym wpływ wartości na cechy transakcji. COM+ wymusza aktywację JIT i synchronizację dla wszystkich składników transakcji.

Wartość atrybutu Nowa transakcja Transakcja klienta Korzeń transakcji Aktywacja JIT Synchronizacja
Niepełnosprawny
Nigdy
Może
Nigdy
Fakultatywny
Fakultatywny
Nieobsługiwane
Nigdy
Nigdy
Nigdy
Fakultatywny
Fakultatywny
Obsługiwane
Nigdy
Jeśli klient ma transakcję
Nigdy
Wymagane
Wymagane
Wymagane
Może
Jeśli klient ma transakcję
Jeśli klient nie ma transakcji
Wymagane
Wymagane
Wymaga nowego
Zawsze
Nigdy
Zawsze
Wymagane
Wymagane

Granice transakcji

Transakcja ma początek, koniec i odbywa się dokładnie raz. Podczas wykonywania transakcja może wywołać zasób, taki jak baza danych lub kolejka, w celu wykonania co najmniej jednego zadania. Każdy zasób należy do granicy transakcji . Wszystkie zasoby w granicach transakcji, które mogą przekraczać wiele granic procesów i komputerów, dzielą jedną transakcję. Zarządzanie spójnością w ramach tych procesów i granic komputerów jest ważne.

Com+ zapewnia spójność dzięki automatycznemu zarządzaniu granicami transakcji na podstawie wartości atrybutu transakcji ustawionego dla każdego składnika. Transakcja COM+ automatycznie przekazywana jest do obiektów, które zostały poinstruowane do udziału w transakcji, i omija obiekty, które zostały poinstruowane do działania poza transakcją. COM+ nie obsługuje zagnieżdżonych transakcji. Zamiast tego transakcje COM+ są odrębne i krótkotrwałe.

Pierwszy obiekt w granicy transakcji jest specjalny dla transakcji i jest nazywany obiektem głównym transakcji. W transakcji może istnieć tylko jeden obiekt główny. Wszystkie inne obiekty w hierarchii transakcyjnej pod obiektem głównym są nazywane obiektami wewnętrznymi.

Mapowanie transakcji

Jednym ze sposobów zapewnienia, że obiekt znajduje się w prawidłowej granicy transakcji, jest mapowanie transakcji przed rozpoczęciem pisania składników. Mapując transakcje, można określić najlepsze ustawienie dla każdego składnika, który zapisujesz. Tym bardziej pewny, w jaki sposób składniki mają być używane, tym łatwiej jest wybrać poprawną wartość atrybutu transakcji.

W czasie wykonywania COM+ analizuje atrybut transakcji, aby określić, czy obiekt powinien być elementem głównym nowej transakcji, zostać utworzony w istniejącej transakcji lub zostać utworzony jako obiekt nietransakcyjny.

Na poniższej ilustracji przedstawiono możliwe mapowanie transakcji. Na ilustracji klient tworzy obiekt 1, który wymaga transakcji. Ponieważ żadna transakcja nie istnieje, com+ tworzy transakcję 1 i umieszcza obiekt 1 w nim jako obiekt główny. Obiekt 1 tworzy obiekt 2, który obsługuje transakcje i dlatego jest umieszczany w transakcji 1. Obiekt 2 tworzy obiekt 3, który nie obsługuje transakcji i dlatego znajduje się poza wszystkimi transakcjami. Obiekt 2 tworzy również obiekt 4, który wymaga transakcji i dlatego jest umieszczony w transakcji 1. Obiekt 3 tworzy obiekt 5, który obsługuje transakcje. Jednak ponieważ obiekt 5 jest tworzony przez obiekt, który nie istnieje w ramach transakcji, jest również umieszczany poza wszystkimi transakcjami. Obiekt 4 tworzy obiekt 6, który wymaga nowej transakcji, dlatego com+ tworzy transakcję 2 i umieszcza obiekt 6 w nim jako obiekt główny. Obiekt 6 tworzy obiekt 7, który obsługuje transakcje i dlatego jest umieszczany w transakcji 2.

Diagram przedstawiający interakcję klienta z transakcją 1 i transakcją 2.

Na powyższej ilustracji przedstawiono dwa potencjalne obszary problemów. Po pierwsze, większość pracy jest podzielona między dwie odrębne transakcje. Jeśli transakcja 1 zakończy się niepowodzeniem po utworzeniu obiektu 6 przez obiekt 4, transakcja 2 przebiega niezależnie od wyniku transakcji 1. Jeśli ten wynik jest niezamierzony, możesz chcieć złożyć operacje obu transakcji w jedną transakcję, którą można osiągnąć, zmieniając atrybut transakcji object 6 na Wymagane.

Ilustracja mapowania pokazuje również, że obiekty 3 i Object 5 nie są transakcyjne, działają całkowicie poza zakresem transakcji 1 i 2. Jeśli obiekt 5 aktualizuje trwałe dane, warto ponownie rozważyć jego stan nie transakcyjny. Obiekt 5 można umieścić w transakcji, zmieniając jego atrybut transakcji na Wymagane.

ustawianie atrybutu transakcji