Nastavte metode *REQUIRES_NEW. *
Adámek Lukáš wrote / napísal(a):
Ahoj
Mame JEE aplikaci, ktera bezi na JBoss 4.0.4.
Pouzivame EJB3. Kazda metoda EJBeany bezi jako transakce.
Pro synchronizaci dat s produktem 3. strany mame napsanu metodu Beany
pojmenovanou doSync().
Metoda doSync() je volana Timerem v nastavenem intervalu.
Metoda doSync() zajistuje
- prenos samotnyh dat
- ulozeni vyslednych reportu prenosu do db
Narazili jsme na problem.
Pokud totiz v metode nastane vyjimka, ktera zapricini nemoznost
dalsiho ukladani z duvodu nekonzistence
dat v aplikaci 3 strany volame rollback transakce. Tim padem se nam
ale nezapisou ani reporty.
Chteli jsme to vyresit tak, ze v metode doSync(), ktera je obalena
transakci, vytvorime novou sourozeneckou
transakci, ktera bude mit za ukol zapsat a comitnout reporty z prenosu.
Ulozeni v nove transakci jsme si predstavovali nejak takto:
InitialContext ctx = *new* *InitialContext*();
UserTransaction ut =
(UserTransaction)ctx.*lookup*("java:comp/UserTransaction");
ut.*begin*();
*ulozReporty*(reportslist);
ut.*commit*();
Problem je ze vysledkem je:
Transaction already active, cannot nest transactions.
Jak se podobne problemy resi v EJB3, kdyz neni mozne jakkoliv z transakce
vytvorit novou transakci (at uz potomka, nebo sourozence)
Diky
Lukas Adamek