EJB, transakcje, rollback i zerwanie połączenia

0

Witam,

Piszę mały projekt związany z EJB, hibernate i transakcjami - ma on funkcjonalność mini-sklepu, w bazie posiadam magazyn z produktami i stanem magazynowym. Wywołuję w EJB metodę startShopping(), która pobiera produkty z bazy, dodaje je do koszyka i zmienia stan magazynowy w bazie - taka symulacja procesu zakupowego. Metoda buyProduct objęta jest transakcją z atrybutem REQUIRES_NEW. W tej metodzie odwołuję się do DAO produktów, które korzystają z Entity menagera. Metody DAO do update, create i delete posiadają atrybut transakcji REQUIRED. W momencie gdy stan magazynowy produktu będzie mniejszy od zera, rzucany jest wyjątek o braku produktów na stanie, a transakcja jest wycofywana.

Wszystko działa, dopóki kupuję jeden produkt, natomiast jeśli w procesie zakupowym mam kilka wywołań buyProduct dla różnych produktów, to w momencie rzucenia wyjątku coś się dzieje nie tak i bean traci połączenie z bazą. Nie bardzo wiem, jak to rozwiązać. Czy ktoś mógłby mi coś doradzić?

Transakcje są zarządzane przez kontener, w beanie wstrzykuję EJBContext, na którym wykonuję serRollbackOnly po przechwyceniu wyjątku. Po wykonaniu rollbacka coś się dzieje i aplikacja się wywala.

Stack trace: http://wklej.to/RNp9b/text

Dzięki za wszelkie rady!

1

moze brakuje ci połączeń w puli

1

połączenia z db przeciez sa zestawiane przed deployem aplikacji 0.o
bardziej wywolujesz dwie metody w tym samym binie, niby masz oznaczone @ required ;) ale jak dobrze wiesz.... taktoniedziaua :D

elo

0

jesi dostaje timeouta ze wzgledu na przekroczenie powiedzmy 300s... to cos jest nie teges :P w apce samej

0

W trakcie rozmowy z prowadzącym zajęcia okazało się, że faktycznie równolegle wywołuję te metody. Po zmianie na jednorazowe wykonanie zakupu koszyka i objęciu całości jedną transakcją, aplikacja działa poprawnie. Dzięki za pomoc! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1