Pokud to ten Tx manazer da, pak to lze udelat i programove pres
UserTransaction, jenom je potreba ji nastavit REQUIRES_NEW propagaci.

On Nov 15, 2007 6:24 PM,  <[EMAIL PROTECTED]> wrote:
> 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
> >>
> >>
>
>
>
>
>



-- 
S pozdravem Roman "Dagi" Pichlik

/* http://www.sweb.cz/pichlik/ Blog pro kodery */

Odpovedet emailem