Quartz
Quartz je ogrodje za pisanje aplikacij, ki temeljijo na periodičnih opravilih. Je odprtokodni sistem, ki lahko poganja samostojne aplikacije v Java jeziku ali pa take pisane za EE okolje. Uporabljamo ga kot razdeljevalnik poslov, ki so del nekih poslovnih procesov na strežniku ali strežnikih, saj podpira tudi gruče (load-balance fail-over). Lahko ga uporabimo tudi kot RMI (Remote Method Invocation) strežnik.
S konfiguracijo lahko dosežemo, da prožilci (triggers) prožijo posle (jobs) na praktično neomejeno število načinov. Na primer:
- v določenem trenutku dneva (na milisekundo natančno)
- na določen dan v tednu/mesecu/letu
- periodično (n-krat, v neskončnost)
- do določenega datuma/ure
- ponavljajoče z zamikom
- ne na določen datum (praznik)
V Quartz-u imamo torej koncept posla in prožilca. Za en posel imamo lahko več prožilcev. Konkretno je posel, ki ga želimo izvesti (ali izvajati) implementiran kot razred, ki implementira vmesnik Job (ali InterruptableJob). Implementirati moramo samo eno metodo (execute), v kateri izvedemo kar želimo. Posle in prožilce lahko instanciramo programsko ali pa deklarativno. Osebno sem dosedaj uporabil slednji pristop, saj omogoča v produkcijskem okolju zelo enostavne spremembe kdaj na se kaj izvede. Potrebna je samo sprememba XML konfiguracijske datoteke. Quartz preverja ali se je kaj spremenilo in ustrezno reagira, torej nam ni potrebno aplikacije ponovno zaganjati, če želimo spremeniti na primer urnik posameznih opravil.
Posle, prožilce in ostale informacije o razdeljevalniku lahko hranimo tudi v podatkovni bazi, kar pomeni, da v primeru sesutja aplikacije ne izgubimo potrebnih informacij za nadaljevanje poslov ob ponovnem zagonu.
Če želimo prekiniti dolgo izvajajoč posel, potem implementiramo InterruptableJob vmesnik. Na ta način lahko v metodi interrupt nastavimo zastavico, ki jo v dolgi iteraciji pregledujemo in ustrezno reagiramo - varno končamo s procesiranjem.
Edina konkurenca je Flux, ki pa je komercialni izdelek.
Po mojih izkušnjah je uporaba Quartz ogrodja enostavno in zelo olajša (in skrajša!) razvoj aplikacije s potrebami po časovnem razdeljevalniku.