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


Odpovedet emailem