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!