Diky za odpoved. Tohle je presne to co jsem potreboval. Funguje to presne tak jak ma.
Lukas Adamek -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Thursday, November 15, 2007 6:25 PM To: [email protected] Subject: Re: EJB3 a transakce v transakci Dobry den, v principu je tento navrh dobre, jen je potreba volat metodu ulozReporty() pres EJB objekt, protoze v EJB objektu container zahajuje transakce. Tj. misto ulozReporty() napr.: sessionContext.getBusinessObject(MyLocalIntf.class).ulozReporty(reportsList); Transakcni atributy se pri primem volani (tj. v ramci beany) neuplatni. Jo a nepujde o vnorene transakce, ale aktivni transakce bude pozastavena a vytvori se nova (flat model, jak tu uz nekdo zminil). Z.T. -- Zdenek Tronicek Department of Computer Science and Engineering Prague tel: +420 2 2435 7410 http://cs.felk.cvut.cz/~tronicek Quoting Richard Holly <[EMAIL PROTECTED]>: > @TransactionAttribute(TransactionAttributeType./REQUIRES_NEW/) > > @TransactionTimeout(18000) > > *public* *void* *doSync*() { > > try { > > // ... Provadej samotny prenos > > if(chybanekonzistence) { > > throw new RuntimeException() > > } > > } finally > > // uloz reporty doUlozReporty( reportslist); } > > } > > > > @TransactionAttribute(TransactionAttributeType./REQUIRES_NEW/) > > *public* *void* *doUlozReporty*( ... reportslist) { > > *ulozReporty*(reportslist); > > } > > > > > > > Adámek Lukáš wrote / napísal(a): >> >> Hmm, asi jsem to nepopsal dostatecne. >> >> Metoda doSync() ma uz nastaveno *REQUIRES_NEW* z duvodu zvetseni >> delky transakce (stand. >> >> Mame nastavenu delku transakce na 2 minuty, coz staci pro celou >> aplikaci, a jen pro tuto metodu >> >> mame nastaveno na 5 hodin). >> >> Ale v ramci metody doSync() potrebujeme cast jejiho kodu obalit >> novou transakci. >> >> Zjednodusene: >> >> @TransactionAttribute(TransactionAttributeType./REQUIRES_NEW/) >> >> @TransactionTimeout(18000) >> >> *public* *void* *doSync*() { >> >> try { >> >> // ... Provadej samotny prenos >> >> if(chybanekonzistence) { >> >> throw new RuntimeException() >> >> } >> >> } finally >> >> // uloz reporty InitialContext ctx = *new* >> *InitialContext*(); >> >> UserTransaction ut = >> (UserTransaction)ctx.*lookup*("java:comp/UserTransaction"); >> >> ut.*begin*(); >> >> *ulozReporty*(reportslist); >> >> ut.*commit*(); >> >> // v pripade ze nastala nekonzistence >> >> } >> >> } >> >> Jelikoz mi runtimeExceptin vyleti ze servisni vrstvy, automaticky >> dochazi k rollbacku, ale pritom se zapsali JEN reporty >> >> l. >> >> ------------------------------------------------------------------------ >> >> *From:* [EMAIL PROTECTED] >> [mailto:[EMAIL PROTECTED] *On Behalf Of *Richard Holly >> *Sent:* Thursday, November 15, 2007 2:19 PM >> *To:* Java >> *Subject:* Re: EJB3 a transakce v transakci >> >> 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 >> >>
