No skoro bych si tipnul, že vám to celé jede v jedné transakci. JMS nemůže
zpracovat zprávu dříve, než je transakční kontext, ve kterém je zpráva
vytvořena commitnutý. Kdyby to tak šlo, tak při rollback situaci by tahle
operace nešla vrátit zpět. Důležité je tedy dostat vytváření JMS zpráv do
jiných transakčních kontextů - tedy použití "requiresNew" v případě, že vám
transakce řídí kontejner (teda myslím si, že by tohle mělo pomoct - nejsem
žádný J2EE expert).
Zkuste to, třebas to bude v tom.
Novoj
29.5.07, Ales Dostal <[EMAIL PROTECTED]>:
Zdravim,
tak jsem tak nejak probadal, jak udelat plneni. Naplanovat ulohu, spustit
a identifikovat o stavu.
Jenze, kdyz na zacatku plneni poslu do Topic zpravu o tom, ze se sestava
plni a na konci metody poslu zpravu o tom, ze je sestava naplnena,
na klienta se mi poslou obe zpravy az po dokonceni cele metody.
Pr:
Server:
public void napln(Timer timer) {
// send message to Topic
// nejake plneni
// send message to Topic
}
Klient:
Zacatek plneni 12:30:21
Konec plneni 12:30:21
Proste ceka, az dokonci celou metodu a pak vse odesle, ale ja bych
potreboval, aby se mi message do Topic poslali po sobe a pak cekali na
naplneni.
Jediny napad, na ktery jsem prisel byl, ze jsem to odeslani zprav hodil do
vlastniho threadu, ale nekde jsem cetl, ze vytvaret na serveru thready by se
nemelo.
Pr:
public void napln(Timer timer) {
// thread
zacatek.start();
// nejake naplneni
// thread
konec.start();
}
Klient:
Zacatek plneni 12:30:21
Konec plneni 12:30:29
Zkousel jsem to pomoci nove EJB s anotaci PreConstruct a PreDestroy, ale
to nefunguje, protoze po vytvoreni se zavola PreConstruct a PreDestroy uz
nikoli, pri dalsim plneni, se nezavola jiz nic :(
Nevim, jestli pomoci threadu je to zrovna nejidealnejsi reseni. :(
--
--------------------------------------------------------------
Ing. Jan Novotný
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
http://blog.novoj.net
Myšlenky dne otce Fura
--------------------------------------------------------------