Ahoj,

zkusím odpovědět na Tvoje otázky.
1. Při atributu REQUIRED bude použita již existující transakce, tedy ta, kterou jsi nastartoval ručně. 2. J2EE opravdu nepodporuje nested transakce, můžeš si ovšem vypomoci attributem REQUIRES_NEW, pokud potřebuješ něco udělat v samostatné transakci bez ovlivnění aktuální transakce. Pří vyžádání UserTransaction uvnitř container-managed transakční metody pravděpodobně dostaneš existující nastartovanou transakci, jak předpokládáš. Myslím, že Ti container nedovolí na ní zavolat ručně commit, ale pokud ano (zkoušel jsi to?), transakce se ukončí a další práce pojede v nové transakci. Rollback tedy určitě nebude moci odvolat práci z první, již ukončené transakce. Přiznám se, že takto kombinovat container-managed a bean-managed transakce jsem nikdy nezkoušel a myslím, že takové řešení je dost nepřehledné. Container Ti to pravděpodobně vůbec nedovolí. Transakce bys měl začínat i končit ve stejné metodě, container-managed transakce by se neměly ukončovat ručně, stačí nastavit rollbackOnly flag, pokud chceš vynutit rollback, jinak bude transakce ukončena při ukončení metody.

Samozřejmě neznám přesně strukturu Tvého projektu, proto si netroufám soudit, zda směřuješ správným směrem. Můžeš případně trochu rozvést "veskere zpracovani ve vsech listenerech probehne v jedne transakci"?

Vašek


Moravec Jan wrote:

Ahoj,

Rad bych se zeptal nejakeho J2EE znalce jak se chova UserTransaction v 
prostredi, kde je pouzita fasada ze session beanu s container-managed 
transakcemi (vse nastaveno na Required).

V podstate nastavaji tyto dva pripady:

1) UserTransaction vytvorim pred tim, nez se zavola metoda na session beanu 
(tj. pred tim, ze container pripadne zalozi novou transakci)

2) UserTransaction vytvorim az nekde za session beanem.

Otazky:

ad 1) Pouzije session bean jiz existujici transakci (tj. moji UserTransaction), 
nebo vytvori novou?

ad 2) Dostanu v podobe UserTransaction novou transakci, nebo dostanu jiz 
existujici transakci? Nekde jsem zahledl neco o tom, ze J2EE nepodporuje 
vnorovani transakci, takze predpokladam, ze dostanu jiz existujici transakci. 
Nicmene, co kdyz na ni explicitne zavolam commit a pak nekde dale behem dalsiho 
zpracovani vyhodim runtime vyjimku s tim, ze chci rollback cele transakce. 
Provede se rollback i toho co jsem jiz comittoval v UserTransaction?

V podstate mi jde o implementaci udalostniho frameworku - aplikace v ruznych 
mistech (treba i na JSP strankach, pripadne hloubeji za session facade)  
generuje udalosti. Tyto se predavaji do registrovanych listeneru. Listener muze 
provadet cokoli (typicky zapis do DB) a potrebuji zarucit, ze veskere 
zpracovani ve vsech listenerech probehne v jedne transakci.

Diky moc za osvetleni.
Honza


Odpovedet emailem