Flag se musí v db updatovat prostě jinou transakcí. Zároveň se hodí přidat timestamp atribut, do kdy je ten zámek aktivní - v praxi pak spuštěný timer může ten timestamp updatovat (prodlužovat jeho platnost, aby nedošlo k opětovnému spuštění). Podmínkou pro spuštění "nového" timeru je neexistující zámek, nebo vyexpirovaný (tj. ošetření případu, že server spadne a zámek existuje).
Jiří Holý From: konference-boun...@java.cz [mailto:konference-boun...@java.cz] On Behalf Of Tomas Studva Sent: Monday, September 06, 2010 1:24 PM To: Java Subject: Re: Jeden beziaci proces Asi myslite explicitny DB zamok. To sa mi nezda celkom idealne, lebo taky zamok je viazany na tranzakciu a teda ta by musela byt otvorena po celu dobu. Tomuto som sa vyhol, lebo sa neda zarucit dlzka behu toho procesu, v zlom pripade to moze bezat aj 30 minut. No na druhej strane, nemam ziadne ine proti :). Moje riesenie cez flag teda stlpec v tabulke ma inu nevyhodu, ktora je ale ovela viacej bolestivejsia. Ked sa restartne server alebo vypadne elektrina pocas behu procesu, tak sa flag nezmeni na false. Dakujem, zvazim to. 2010/9/6 Kamil Podlesak <kamil.podle...@gmail.com<mailto:kamil.podle...@gmail.com>> Dobrý den, Zámek v databázi má výhody: - bude fungovat i v clusteru - lze ho sledovat administračními nástroji databáze a případně i násilně zrušit Kamil Podlešák 2010/9/6 Tomas Studva <tstu...@gmail.com<mailto:tstu...@gmail.com>>: > Dobry den, > v nasej aplikacii mame periodicky spustany proces. Tento proces je > schedulovany Jbossom, a moze trvat od niekolko sekund az po niekolko minut. > Spustany je asi kazde tri minuty. Potrebujem zarucit aby bezal iba 1 na > celom servery. Momentalne to riesim flagom v databaze, ak je flag true, tak > proces sa hned ukonci. > > Chcem sa spytat, ci nie je aj jednoduchsie riesenie a ako by to bolo s > implementaciou. Ten zamok naozaj suvisi s datami, teda s databazou a > aplikaciou. Ako druhe riesenie mi napada lockovat sa na nejakom objekte v > aplikacii. > > Tomas Studva