Transakcje zarządzane przez Bean-a (Bean-Managed Transaction)
EJB3, SCBCD niedziela, 31 maja 2009Dla niektórych bean-ów typu enterprise, deklaratywne usługi typu CMT (Container Managed Transaction) mogą nie dostarczać wymaganej granulacji. Przykładowo, klient może chcieć wywołać kilka metod na bean-ie sesyjnym bez commit-owania wykonanych przez nie działań po ich zakończeniu. W tym przypadku klient ma do wyboru dwie opcje: może albo utworzyć instancję własnej transakcji JTA (lub resource-local), albo może zwrócić się do bean-a sesyjnego w celu wyeksponowania metod do obsługi transakcji, które klient może sam wywołać by kontrolować zakres transakcji.
W celu obsługi postawionych wyżej wymagań, EJB oferuje bean-om sesyjnym wygodny sposób obsługi ich zdarzeń związanych z zakresem transakcji. By wyłączyć usługi CMT, w bean-ach sesyjnych należy użyć adnotacji @TransactionManagement(TransactionManagementType.BEAN) lub umieścić odpowiadające temu metadane dla bean-a sesyjnego w pliku ejb-jar.xml.
Dla transakcji typu BMT, kontener EJB w dalszym ciągu dostarcza wsparcia transakcyjnego dla bean-a. Główną różnicą jest to, że bean wykonuje konkretne wywołania w celu rozpoczęcia, commit-owania i rollback-owania transakcji w miejsce użycia atrybutów CMT do deklaratywnego przypisania zachowania transakcyjnego swoim metodom. Także, kontener nie propaguje transakcji rozpoczętych przez klienta do bean-ów, które wybrały własną kontrolę zakresu transakcji. Pomimo, że każdy bean enterprise musi mieć określony taki czy inny plan (CMT czy BMT) dla swoich metod, obydwa typy bean-ów mogą współdziałać ze sobą wewnątrz pojedynczego kontekstu transakcji.
0 komentarze:
Prześlij komentarz