Jika kita menggunakan *NIX atau Linux, kita akan familiar dengan istilah cron atau daemon. Di Windows jika kita buka Control Panel, juga ada tools yang disebut dengan Scheduled Tasks. Semuanya memiliki kemiripan, yaitu menjalankan sebuah task / job / perintah pada sistem operasi tersebut. Di Windows lebih mudah dalam setting-nya karena sudah ada GUI yang mempermudah untuk membuat schedule. Hanya saja, cron di *NIX / Linux memiliki fleksibilitas yang lebih baik pada pola – schedule pattern-nya, meskipun bagi yang belum biasa akan sedikit susah karena harus mempelajari schedule pattern dari cron dan juga membuat script dari cron itu sendiri.
Dengan Java, tidak terlampau sulit untuk melakukan hal yang sama dengan yang dilakukan oleh sistem operasi tersebut, hanya beda cara saja, yang satu built in dari sistem operasi, sedangkan dengan Java perlu sedikit programming
. Schedule ini bisa kita gunakan untuk keperluan aplikasi kita sendiri, atau untuk eksekusi perintah lain di sistem operasi (dengan menggunakan java.lang.Runtime).
Untuk membuat job scheduler dalam Java, sebenarnya telah ada class java.util.Timer dan java.util.TimerTask yang akan membantu kita membuat cron ala kita sendiri. Tapi pasti akan sulit bagi kita untuk ‘building application from the scratch’ alias mulai semua dari awal, apalagi jika aplikasi berkembang ke arah yang lebih kompleks, misalnya akses ke database atau menggunakan library lain misalnya Hibernate / Ibatis. Terlebih jika harus melakukan hardcode, yang notabene tidak fleksibel.
Bersyukurlah karena telah ada library yang mempermudah melakukan hal tersebut. Team OpenSymphony telah membuat Quartz - full-featured, open source job scheduling system – library untuk job scheduling yang open source di bawah lisensi Apache 2.0 yang bisa digunakan di berbagai aplikasi Java, baik Java EE (a.k.a. J2EE) maupun Java SE (a.k.a. J2SE). Sebagai info tambahan, OpenSymphony ini juga yang menelurkan SiteMesh (web decoration framework) dan WebWork (web-application development framework, yang menjadi cikal bakal Struts 2).
Read the rest of this entry »