Obiektowy monitor transakcyjny

Dostęp do bazy danych

W aplikacjach monolitycznych użytkownik systemu sięgając do bazy danych, wywołuje własną sesję połączeniową polegającą na ustanowieniu połączenia, wywołaniu procesu bazy danych i otwarciu bazy danych. Po zakończeniu operacji sesja jest zamykana i tak dzieje się ciągle. Wymaga to ogromnych zasobów systemowych i praktycznie uniemożliwia dostęp do bazy więcej niż kilkunastu lub kilkudziesięciu użytkownikom (nawet na dużym komputerze). Aby efektywnie wykorzystać zasoby systemowe, należy połączenia do bazy stosować dla potrzeb wielu użytkowników.

W monitorze MTS zajmuje się tym Resource Dispenser. Otwiera on pewną liczbę sesji z bazą i w miarę potrzeby wykorzystuje je dla kolejnych użytkowników. Te sesje połączeniowe nigdy nie są zamykane, co znacznie zwiększa wydajność aplikacji.

Podobny problem występuje w przypadku używania obiektów COM. Jeśli klient potrzebuje użyć usług obiektu, musi utworzyć jego instancję, użyć jego metody, a następnie usunąć go z pamięci. MTS optymalizuje użycie obiektów, tworząc - podobnie jak w przypadku sesji z bazą - pulę stale otwartych obiektów, których metod można używać w każdym momencie. Ta cecha jest określana mianem aktywacji obiektów na bieżąco (just-in-time).

Innym problemem w środowisku z wieloma użytkownikami jest zapewnienie jednoczesnego dostępu do danych. Kiedy jeden użytkownik modyfikuje rekord, musi go zablokować przed dostępem innych użytkowników. Jeśli to zablokowanie trwa długo, inni użytkownicy nie mają do niego dostępu. W efekcie następuje zmniejszenie wydajności systemu. Należy więc dążyć do zmniejszenia czasu blokowania dowolnego rekordu bazy. W monitorze MTS zajmuje się tym Shared Property Manager, optymalizujący dostęp do wspólnych zasobów w bazach danych.

MTS zapewnia również obsługę wielu wątków, stale otwartych podobnie jak instancje obiektów lub połączenia z bazą.

Zarządzanie transakcjami

MTS realizuje automatycznie zarządzanie rozproszonymi transakcjami. Poziom ochrony transakcji specyfikuje się deklaratywnie za pomocą stron właściwości. MTS za pomocą rozproszonego koordynatora transakcji (Distributed Transaction Coordinator - DTC) realizuje dwufazowe zatwierdzanie transakcji (two-phase commit) z każdą bazą danych i innymi zasobami (np. MSMQ) uczestniczącymi w transakcji.

MTS był pierwszym monitorem transakcji, w którym wprowadzono transakcyjność deklaratywną, polegającą na tym, że programista w momencie opracowania aplikacji deklaruje, które komponenty i obiekty transakcji będą w niej uczestniczyć i w jakim kontekście. Semantykę transakcji deklaruje się w chwili łączenia obiektów ActiveX w pakiet aplikacyjny do uruchamiania na serwerze. Każdemu obiektowi przypisuje się atrybut transakcyjności, określający sposób jego uczestniczenia w operacjach na bazie danych. Obiekt może "wymagać transakcji", "wymagać nowej transakcji", "może brać udział w transakcji" lub "nie mieć właściwości transakcyjnych".

Każdy obiekt MTS jest tworzony wewnątrz transakcji bądź poza nią i jest obsługiwany zgodnie ze zdeklarowanymi właściwościami. Dzięki temu programista nie musi posługiwać się transakcyjnymi funkcjami API, jak w tradycyjnych monitorach transakcji.

MTS zapewnia obsługę transakcji, korzystając z tzw. obiektu kontekstowego (Context Object). Jeśli transakcja wymaga użycia dwóch lub więcej obiektów, ten sam obiekt kontekstowy jest stosowany do koordynacji ich działania.

Do komunikacji z zasobami DTC korzysta z protokołu XA (opracowanego przez konsorcjum X/Open) lub LU6.2 (specyficzny dla systemów IBM) oraz z własnego systemu OLE. Ten ostatni protokół jest wbudowany w każdą wersję Windows, pozwala więc na uzyskanie największej wydajności transakcyjnej.


TOP 200