jug-indonesia  

Re: [JUG-Indonesia] [Quartz Scheduler] java.lang.NoClassDefFoundError: org.quartz.StatefulJob

Samuel Franklyn
Wed, 04 Nov 2009 01:49:34 -0800

PUTRI CHAIRINA wrote:
> Dear JUGers,
> 
> Numpang bertanya ya..
> Saya menggunakan Quartz Scheduler.
> Pada pertama kali Job di trigger, ia berjalan baik. Kemudian ada error :
> java.lang.NoClassDefFoundError: org.quartz.StatefulJob.
> Berarti ini maksud ada class yang tidak ditemukan, yaitu StatefulJob.
> Betul/salah? Nah, setelah saya cek di jar Quartz, class tersebut ada.
> 

Ini isu multi-threading. Bagaimana cara kamu menjalankan Quartz didalam
web app kamu? Cara yang benar adalah dengan menambahkan konfigurasi
berikut dalam web.xml

<context-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</context-param>

<listener>
<description>QuartzInitializerListener</description> 
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>

Sebelum kamu menschedule job maka scheduler harus dipause dulu.

ServletContext sc = sce.getServletContext();

StdSchedulerFactory ssf = (StdSchedulerFactory) 
sc.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY);
log.info("StdSchedulerFactory:" + ssf.toString());

Scheduler scheduler = ssf.getScheduler();

scheduler.standby();

JobDetail jobDetail = new JobDetail("RetrieveAndStorePnrJob", 
Scheduler.DEFAULT_GROUP, RetrieveAndStorePnrJob.class);

CronTrigger trigger = new CronTrigger("RetrieveAndStorePnrJobTrigger", 
Scheduler.DEFAULT_GROUP, configs.getConfigValue());

scheduler.scheduleJob(jobDetail, trigger);

scheduler.start();