EJB, transakcje, rollback i zerwanie połączenia

EJB, transakcje, rollback i zerwanie połączenia
SY
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:11
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!

SZ
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:616
1

moze brakuje ci połączeń w puli

M9
Ilość połączeń nawiązanych, oczekujących powinna być dostępna w monitorze serwera aplikacyjnego. Zawsze i tak warto zwiększyć. Poza tym czas oczekiwania na timeout też może mieć znaczenie. Domyślne ustawienia są słabe.
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

SY
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:11
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! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.