title: Quartz Scheduler using JDBC JobStore
body: <p>For the first time i stored the jobs and scheduled them using crontrigger with the below code.</p>
  
  <pre><code>package com.generalsentiment.test.quartz;
  
  import static org.quartz.CronScheduleBuilder.cronSchedule;
  import static org.quartz.JobBuilder.newJob;
  import static org.quartz.TriggerBuilder.newTrigger;
  
  import java.util.Date;
  import java.util.Properties;
  
  import org.quartz.CronTrigger;
  import org.quartz.JobDetail;
  import org.quartz.Scheduler;
  import org.quartz.SchedulerFactory;
  import org.quartz.SchedulerMetaData;
  import org.quartz.impl.StdSchedulerFactory;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  public class CronTriggerExample {
  
      public void run() throws Exception {
          Logger log = LoggerFactory.getLogger(CronTriggerExample.class);
  
          System.out.println("------- Initializing -------------------");
  
          Xml config = new Xml("src/hibernate.cfg.xml", "hibernate-configuration");
  
          Properties prop = new Properties();
          prop.setProperty("org.quartz.scheduler.instanceName", "ALARM_SCHEDULER");
          prop.setProperty("org.quartz.threadPool.class",   
                          "org.quartz.simpl.SimpleThreadPool");
          prop.setProperty("org.quartz.threadPool.threadCount", "4");
  
          prop.setProperty("org.quartz.threadPool
                          .threadsInheritContextClassLoaderOfInitializingThread", "true");
  
          prop.setProperty("org.quartz.jobStore.class", 
                            "org.quartz.impl.jdbcjobstore.JobStoreTX");
          prop.setProperty("org.quartz.jobStore.driverDelegateClass", 
                            "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
          prop.setProperty("org.quartz.jobStore.dataSource", "tasksDataStore");
          prop.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_");
          prop.setProperty("org.quartz.jobStore.misfireThreshold", "60000");
          prop.setProperty("org.quartz.jobStore.isClustered", "false");
  
          prop.setProperty("org.quartz.dataSource.tasksDataStore.driver", 
                config.child("session-factory").children("property").get(1).content());
          prop.setProperty("org.quartz.dataSource.tasksDataStore.URL", config.child("session-
               factory").children("property").get(2).content());
          prop.setProperty("org.quartz.dataSource.tasksDataStore.user", config.child("session-
               factory").children("property").get(3).content());
          prop.setProperty("org.quartz.dataSource.tasksDataStore.password", 
               config.child("session-factory").children("property").get(4).content());
          prop.setProperty("org.quartz.dataSource.tasksDataStore.maxConnections", "20");
  
          // First we must get a reference to a scheduler
          SchedulerFactory sf = new StdSchedulerFactory(prop);
          Scheduler sched = sf.getScheduler();
  
          System.out.println("------- Initialization Complete --------");
  
          System.out.println("------- Scheduling Jobs ----------------");
  
          // jobs can be scheduled before sched.start() has been called
  
          // job 1 will run exactly at 12:55 daily
          JobDetail job = newJob(SimpleJob.class).withIdentity("job2", "group2").build();
  
          CronTrigger trigger = newTrigger().withIdentity("trigger2", "group2")
                                            .withSchedule(cronSchedule("00 15 15 * * 
                                                           ?")).build();
  
          Date ft = sched.scheduleJob(job, trigger);
          System.out.println(sched.getSchedulerName());
          System.out.println(job.getKey() + " has been scheduled to run at: " + ft
                  + " and repeat based on expression: "
                  + trigger.getCronExpression());
  
          System.out.println("------- Starting Scheduler ----------------");
  
          /*
           * All of the jobs have been added to the scheduler, but none of the
           * jobs will run until the scheduler has been started. If you have
           * multiple jobs performing multiple tasks, then its recommended to
           * write it in separate classes, like SimpleJob.class writes
           * organization members to file.
           */
          sched.start();
  
          System.out.println("------- Started Scheduler -----------------");
  
          System.out.println("------- Waiting five minutes... ------------");
          try {
              // wait five minutes to show jobs
              Thread.sleep(300L * 1000L);
              // executing...
          } catch (Exception e) {
          }
  
          System.out.println("------- Shutting Down ---------------------");
  
          sched.shutdown(true);
  
          System.out.println("------- Shutdown Complete -----------------");
  
          SchedulerMetaData metaData = sched.getMetaData();
  
  
          System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
  
      }
  
      public static void main(String[] args) throws Exception {
  
          CronTriggerExample example = new CronTriggerExample();
          example.run();
      }
      }
  </code></pre>
  
  <p>And the details are stored in Tables - <code>QRTZ_CRON_TRIGGERS</code>, <code>QRTZ_JOB_DETAILS</code> &amp; <code>QRTZ_TRIGGERS</code></p>
  
  <p>My doubt is How to schedule the jobs that are stored in DB. How to display the list of jobs in a jsp page &amp; how to trigger them automatically.
  Ours is a struts2 application with Hibernate3 ORM. I am trying to initialize the quartz scheduler when the application loads. But am unable to.</p>