Jobs not triggering with Persistent stores but with Ram Stores

132 views
Skip to first unread message

Ashish Negi

unread,
Feb 19, 2016, 7:12:12 AM2/19/16
to clojure-quartz
Hi
Thanks for the quartzite. If the code here is not readable, please read :  https://gist.github.com/ashishnegi/d3239a8b65b6dc185402

Thanks for quartzite.
I am trying to make quartz work with jdbc store. However, i find that new jobs are not triggering.
I can see all new jobs and triggers in my database. My `defjobs` from another files also work.
It is just that jobs are not getting triggered.
My scheduler code is :

```clj
(ns theophrastus.utils
  (:require [clojurewerkz.quartzite.scheduler :as qsched]
            [clojurewerkz.quartzite.triggers :as qtrigger]
            [clojurewerkz.quartzite.jobs :as qjobs]
            [clojurewerkz.quartzite.jobs :refer [defjob]]
            [clojurewerkz.quartzite.schedule.simple :refer [schedule with-repeat-count with-interval-in-milliseconds]]
            [theophrastus.tasks :as ttasks]
            [clj-time.core :as tt])
  (:import [theophrastus.tasks NoOpJob])
  (:import theophrastus.listeners)
  (:import java.util.UUID)
  (:import java.lang.Thread))

(qtrigger/key "triggers.102")
(qjobs/key "jobs.102")

(def scheduler (atom nil))

(defjob NoOpJob-in-file
  [ctx]
  (println "Running no-op-job"))

(defn start-scheduler []
  (let [s (-> (qsched/initialize) qsched/start)
        x (println (.getMetaData s))
        job (qjobs/build
             (qjobs/of-type NoOpJob-in-file)
             (qjobs/with-identity (qjobs/key (str (UUID/randomUUID)) "test_job_")))
        trigger (qtrigger/build
                 (qtrigger/with-identity (qtrigger/key
                                          (str (UUID/randomUUID)) "test_trig_"))
                 (qtrigger/start-at (-> 5 tt/seconds tt/from-now))
                 (qtrigger/with-schedule (schedule
                                          (with-repeat-count 10)
                                          (with-interval-in-milliseconds 200))))]
    (reset! scheduler s)
    (qsched/add-scheduler-listener s (listeners.))
    (qsched/schedule s job trigger)
    (println (if (qsched/started? s)
               ">>>>>>>>>> scheduler started : true"
               ">>>>>>>>>> scheduler started : false"))
    )))
```
My properties file is :
```
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer=true
org.quartz.scheduler.classLoadHelper.class=theophrastus.DynamicClassLoadHelper
org.quartz.threadPool.threadCount=6

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

org.quartz.jobStore.tablePrefix = qrtz_
org.quartz.jobStore.dataSource = ashish

org.quartz.dataSource.ashish.driver=org.postgresql.Driver
org.quartz.dataSource.ashish.URL=jdbc:postgresql://localhost:5438/french_castle
org.quartz.dataSource.ashish.user=french_castle
org.quartz.dataSource.ashish.password=castle

```
I added scheduler listener with below code to get scheduler state messages :
```clj
(ns theophrastus.listeners
  (:gen-class :extends org.quartz.listeners.SchedulerListenerSupport
              :expose-methods {-jobAdded jobAdded
                               -jobScheduled jobScheduled
                               -schedulerError schedulerError
                               -jobDeleted jobDeleted
                               -jobUnscheduled jobUnscheduled
                               -triggerPaused triggerPaused
                               -triggerResumed triggerResumed
                               }))

(defn- -jobAdded [this jobDetail]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : Job added " + (.getKey jobDetail)))

(defn- jobDeleted [this jobDetail]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : Job deleted " + (.getKey jobDetail)))

(defn- jobUnscheduled [this triggerKey]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : Job jobUnscheduled " + triggerKey))

(defn- -jobScheduled [this trigger]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : In SchedulerListener jobScheduled with trigger."))

(defn- -schedulerError [this msg exception]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : schedulerError : " msg exception))

(defn- triggerPaused [this triggerKey]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : Job triggerPaused " + triggerKey))

(defn- triggerResumed [this triggerKey]
  (println ">>>>>>>>>>>>> SchedulerListenerSupport : Job triggerKey " + triggerKey))
```

The log generated with `lein run server` given to my -main :
```log
#object[org.quartz.SchedulerMetaData 0x68c7162b Quartz Scheduler (v2.1.7) 'QuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.impl.StdScheduler' - running locally.
  Running since: Fri Feb 19 17:32:51 IST 2016
  Not currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 6 threads.
  Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is not clustered.
]
>>>>>>>>>>>>> SchedulerListenerSupport : Job added  #function[clojure.core/+] #object[org.quartz.JobKey 0x2a0c9309 test_job_.fab82dcd-d7b2-45c0-922a-96bc4d5c2444]
>>>>>>>>>>>>> SchedulerListenerSupport : In SchedulerListener jobScheduled with trigger.
>>>>>>>>>> scheduler started : true
```

However, when i comment out my datasource and jobstore from quartz.properties,
i get in logs :
```log
#object[org.quartz.SchedulerMetaData 0x23338420 Quartz Scheduler (v2.1.7) 'QuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.impl.StdScheduler' - running locally.
  Running since: Fri Feb 19 17:34:14 IST 2016
  Not currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 6 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
]
>>>>>>>>>>>>> SchedulerListenerSupport : Job added  #function[clojure.core/+] #object[org.quartz.JobKey 0x7e18b9e6 test_job_.ef2e0407-8cb8-468e-9350-105ff7291553]
>>>>>>>>>>>>> SchedulerListenerSupport : In SchedulerListener jobScheduled with trigger.
>>>>>>>>>> scheduler started : true
2016-02-19 17:34:14.458 INFO  [main] theophrastus.core - Server up and running!
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
Running no-op-job
```

What i am doing wrong with Persistent stores ?

Ashish Negi

unread,
Feb 19, 2016, 9:32:40 AM2/19/16
to clojure-quartz
I added more logging in my listener and that pointed out that "sched_time" is null and should not be null for the database and throwing exceptions which lead to job not running.
I found that my quartz version : 2.1.7 but used other version pgsql statements during initial creation of qrtz_* tables.
using 2.1.7 pgsql statements solved the problem.
Reply all
Reply to author
Forward
0 new messages