Domyślny tryb transakcji EJB dla metod asynchronicznych?
Jeśli w EJB mam metodę
@Asynchronous
i nie podaję@TransactionAttribute
, to jak dokładnie kontener obsługuje granice transakcji? Oczywiście nie może korzystać z transakcji wywołującego wątku, więc co to robi?To samo pytanie, ale dotyczące metod, które są wyzwalane przez TimerService.
EDIT: chyba źle to ująłem. Wiem już, że tryb domyślny jest 'wymagany'. Należy więc bezpiecznie założyć, że te metody będą zawsze wywoływane w ramach transakcji. Ale moje pytanie brzmi, jak wygląda cykl życia tej transakcji? Czy kontener tworzy nową transakcję dla każdego połączenia? Czy może ponownie używa tej samej transakcji dla wszystkich wywołań w asynchronicznym wątku roboczym? Jeśli to drugie, to kiedy transakcja zostanie zamknięta?
2 answers
Podobnie jak MDB transakcja jest rozpoczynana przez kontener tuż przed Twoim @Asynchronous
, @Schedule
or @Timeout
Metoda (i odpowiednie interceptors) jest faktycznie wywoływana i popełniana zaraz po zakończeniu metody (i interceptors).
Jak zwykle, transakcja propaguje się do wszystkich ziaren wywołanych w tej metodzie i wszystkich ziaren, które wywołują, rekurencyjnie. Oczywiście inne wywołane fasolki są mile widziane do zmiany semantyki transakcji wywołania ich metody poprzez podanie innych ustawień @TransactionAttribute
(powiedzmy REQUIRES_NEW
, lub NOT_SUPPORTED
).
Na marginesie, transakcje nigdy nie są propagowane do fasoli z @TransactionManagement(BEAN)
. Kontener zawsze zawiesi transakcję w toku przed wywołaniem metody Na transakcji zarządzanej przez Bean.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-27 01:50:58
Od EJB 3.1 spec.
4.5.3 transakcje
Kontekst transakcji klienta nie propaguje się z wywołaniem metody asynchronicznej. Z punktu widzenia dewelopera Bean, nigdy nie ma kontekstu transakcji płynącego z klienta. Oznacza to na przykład, że semantyka wymaganego atrybutu transaction w metodzie asynchronicznej jest dokładnie taka sama jak REQUIRES_NEW.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 15:03:27