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.
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.