Domyślny tryb transakcji EJB dla metod asynchronicznych?

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

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

Author: Mike Baranczak, 2010-10-25

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.

 43
Author: David Blevins,
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.

 35
Author: Przemysław Pelczar,
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