Udostępnij przez


Buforowanie obiektów transakcyjnych

Składniki transakcyjne, które mają zostać połączone, mają specjalne wymagania.

Ręczne rejestrowanie zasobów

Obiekty z możliwością puli, które uczestniczą w transakcjach, muszą ręcznie zarejestrować zarządzane zasoby. Jeśli obiekt przechowuje zarządzane zasoby między klientami, menedżer zasobów nie będzie mógł automatycznie zarejestrować się w transakcji, gdy obiekt zostanie aktywowany w danym kontekście.

Sam obiekt musi obsługiwać logikę wykrywania transakcji, wyłączać automatyczne rejestrowanie menedżera zasobów i ręcznie zarejestrować wszystkie przechowywane zasoby. Kroki w tym celu są specyficzne dla używanego menedżera zasobów. Jeśli musisz wykonać ręczną rejestrację, zapoznaj się z dokumentacją menedżera zasobów.

Jak opisano poniżej, obiekty mogą być umieszczone w puli z powiązaniem transakcji, gdy transakcja jest aktywna i mogą być aktywowane z powiązaniem transakcji, jeśli są wywoływane przez klienta związanego z tą transakcją. Przed wykorzystaniem zasobów należy najpierw sprawdzić związek transakcji. Jeśli obiekt został pobrany z puli specyficznej dla tej transakcji, wykonał już pracę w tej transakcji i zarejestrował swoje zasoby.

Wyłączanie automatycznej rejestracji

Automatyczne rejestrowanie powinno być wyłączone po uzyskaniu zasobu, zwykle w konstruktorze obiektu. Oznacza to, że należy wyłączyć automatyczną rejestrację, a następnie nawiązać połączenie.

Wyłączenie automatycznej rejestracji może czasami być subtelną procedurą, szczególnie w przypadku dostawców dostępu do danych warstwowych. Automatyczne przypisywanie jest czasami powiązane z buforowaniem połączeń, podobnie jak w przypadku ODBC, a czasami nie, podobnie jak w przypadku OLE DB. Może być konieczne upewnienie się, że automatyczne rejestrowanie jest wyłączone na kilku poziomach dostawców.

Implementowanie IObjectControl

Obiekty, które można umieszczać w pulach i uczestniczą w transakcjach, muszą monitorować bieżący stan posiadanych zasobów. Jeśli obiekt wykryje, że jest w stanie nienadającym się do ponownego użycia — na przykład, jeśli połączenie jest nieprawidłowe — powinien zwrócić wartość False dla IObjectControl::CanBePooled. Będzie to miało wpływ zarówno na odrzucenie wystąpienia obiektu, jak i unieważnienie bieżącej transakcji.

Transaction-Specific Baseny

Pula obiektów jest zazwyczaj homogeniczna, a każdy obiekt w puli, który nie jest obecnie używany, może zostać zwrócony dowolnemu klientowi. Jedynym wyjątkiem od tej reguły są obiekty transakcyjne, dla których zoptymalizowano pulę obiektów. Gdy klient żądający obiektu ma skojarzoną transakcję, COM+ przeskanuje pulę, aby znaleźć dostępny obiekt, który jest już skojarzony z tą transakcją. Jeśli zostanie znaleziony obiekt z powiązaniem transakcji, jest on zwracany do klienta; w przeciwnym razie zwracany jest obiekt z puli ogólnej.

W ten sposób utrzymywane są specjalne podpule, zawierające obiekty z powiązaniem dla określonej transakcji. Po zatwierdzeniu lub przerwaniu transakcji te obiekty są zwracane do puli ogólnej bez powiązania z transakcją, gotowe do użytku przez dowolnego klienta.

Z tego powodu, gdy składnik ręcznie włącza swoje zarządzane zasoby do transakcji, powinien najpierw sprawdzić, czy są już włączone do transakcji. Jeśli tak, nie ma potrzeby rejestracji.

Ciągi konstruktorów obiektów COM+

Zarządzanie cyklem życia obiektu i jego stanem

jak działa buforowanie obiektów

Poprawa wydajności dzięki puli obiektów

Wymagania dotyczące obiektów pulowalnych