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