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

 

 

Odpovedet emailem