Skip to content

Commit 7cc07be

Browse files
authored
Merge pull request #18 from factorhouse/keys-identity
Identity to Key
2 parents 8d83182 + 71be7f8 commit 7cc07be

File tree

8 files changed

+160
-42
lines changed

8 files changed

+160
-42
lines changed

cronut-javax/src/cronut.clj

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
(ns cronut
22
(:refer-clojure :exclude [proxy])
33
(:require [clojure.tools.logging :as log]
4-
[cronut.job :as job])
5-
(:import (org.quartz JobDetail JobKey Scheduler Trigger TriggerBuilder TriggerKey)
4+
[cronut.job :as job]
5+
[cronut.trigger :as trigger])
6+
(:import (org.quartz JobDetail JobKey Scheduler Trigger TriggerBuilder)
67
(org.quartz.impl StdSchedulerFactory)))
78

89
(defn scheduler
@@ -57,40 +58,41 @@
5758

5859
(defn pause-job
5960
([^Scheduler scheduler name group]
60-
(.pauseJob scheduler (JobKey. name group)))
61+
(.pauseJob scheduler (job/key name group)))
6162
([^Scheduler scheduler ^Trigger trigger]
6263
(.pauseJob scheduler (.getJobKey trigger))))
6364

6465
(defn resume-job
6566
([^Scheduler scheduler name group]
66-
(.resumeJob scheduler (JobKey. name group)))
67+
(.resumeJob scheduler (job/key name group)))
6768
([^Scheduler scheduler ^Trigger trigger]
6869
(.resumeJob scheduler (.getJobKey trigger))))
6970

70-
(defn unschedule-job
71-
([^Scheduler scheduler name group]
72-
(.unscheduleJob scheduler (TriggerKey. name group)))
73-
([^Scheduler scheduler ^Trigger trigger]
74-
(.unscheduleJob scheduler (.getKey trigger))))
75-
7671
(defn delete-job
7772
([^Scheduler scheduler name group]
78-
(.deleteJob scheduler (JobKey. name group)))
73+
(.deleteJob scheduler (job/key name group)))
7974
([^Scheduler scheduler ^Trigger trigger]
8075
(.deleteJob scheduler (.getJobKey trigger))))
8176

8277
(defn pause-trigger
8378
([^Scheduler scheduler name group]
84-
(.pauseTrigger scheduler (TriggerKey. name group)))
79+
(.pauseTrigger scheduler (trigger/key name group)))
8580
([^Scheduler scheduler ^Trigger trigger]
8681
(.pauseTrigger scheduler (.getKey trigger))))
8782

8883
(defn resume-trigger
8984
([^Scheduler scheduler name group]
90-
(.resumeTrigger scheduler (TriggerKey. name group)))
85+
(.resumeTrigger scheduler (trigger/key name group)))
9186
([^Scheduler scheduler ^Trigger trigger]
9287
(.resumeTrigger scheduler (.getKey trigger))))
9388

89+
;; unschedule-trigger rather than unschedule-job because it works on trigger identity
90+
(defn unschedule-trigger
91+
([^Scheduler scheduler name group]
92+
(.unscheduleJob scheduler (trigger/key name group)))
93+
([^Scheduler scheduler ^Trigger trigger]
94+
(.unscheduleJob scheduler (.getKey trigger))))
95+
9496
(defn start
9597
[^Scheduler scheduler]
9698
(.start scheduler)

cronut-javax/src/cronut/job.clj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(ns cronut.job
2-
(:import (org.quartz DisallowConcurrentExecution Job JobBuilder JobDataMap JobExecutionException)
2+
(:refer-clojure :exclude [key])
3+
(:import (org.quartz DisallowConcurrentExecution Job JobBuilder JobDataMap JobExecutionException JobKey)
34
(org.quartz.spi JobFactory TriggerFiredBundle)))
45

56
(defrecord ^{DisallowConcurrentExecution true} SerialProxyJob [proxied-job]
@@ -45,3 +46,9 @@
4546
description (.withDescription description)
4647
(boolean? recover?) (.requestRecovery recover?)
4748
(boolean? durable?) (.storeDurably durable?)))))
49+
50+
(defn key
51+
([name]
52+
(key name nil))
53+
([name group]
54+
(JobKey. name group)))

cronut-javax/src/cronut/trigger.clj

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(ns cronut.trigger
2+
(:refer-clojure :exclude [key])
23
(:import (java.util TimeZone)
3-
(org.quartz CronScheduleBuilder SimpleScheduleBuilder TriggerBuilder)))
4+
(org.quartz CronScheduleBuilder SimpleScheduleBuilder TriggerBuilder TriggerKey)))
45

56
(defn base-builder
67
"Provide a base trigger-builder from configuration"
@@ -71,4 +72,10 @@
7172
"Trigger on a schedule defined by the cron expression"
7273
[cron]
7374
(builder {:type :cron
74-
:cron cron}))
75+
:cron cron}))
76+
77+
(defn key
78+
([name]
79+
(key name nil))
80+
([name group]
81+
(TriggerKey. name group)))

cronut-javax/test/cronut_test.clj

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(ns cronut-test
2-
(:require [clojure.test :refer [deftest is]]
2+
(:require [clojure.test :refer [deftest is testing]]
33
[clojure.tools.logging :as log]
44
[cronut :as cronut]
55
[cronut.trigger :as trigger])
@@ -22,13 +22,56 @@
2222
_ (cronut/clear scheduler)
2323
trigger (cronut/schedule-job scheduler
2424
(trigger/interval 2000)
25-
(map->TestDefrecordJobImpl {:identity ["name1" "group2"]
25+
(map->TestDefrecordJobImpl {:identity ["name1" "group1"]
2626
:description "test job"
2727
:recover? true
28+
:durable? false}))
29+
trigger2 (cronut/schedule-job scheduler
30+
(trigger/builder {:type :simple
31+
:interval 3000
32+
:time-unit :millis
33+
:repeat :forever
34+
:identity ["trigger-name2" "group1"]})
35+
(map->TestDefrecordJobImpl {:identity ["name2" "group2"]
36+
:description "test job"
37+
:recover? true
38+
:durable? true}))
39+
trigger3 (cronut/schedule-job scheduler
40+
(cronut.trigger/cron "*/8 * * * * ?")
41+
(map->TestDefrecordJobImpl {:identity ["name3" "group2"]
42+
:description "test job"
43+
:recover? false
44+
:durable? true}))
45+
trigger4 (cronut/schedule-job scheduler
46+
(trigger/builder {:type :cron
47+
:cron "*/5 * * * * ?"
48+
:identity ["trigger-name4" "group2"]})
49+
(map->TestDefrecordJobImpl {:identity ["name4" "group2"]
50+
:description "test job"
51+
:recover? false
2852
:durable? false}))]
2953
(is (instance? Trigger trigger))
54+
(is (instance? Trigger trigger2))
55+
(is (instance? Trigger trigger3))
56+
(is (instance? Trigger trigger4))
57+
58+
(testing "unschedule by trigger"
59+
(is (cronut/unschedule-trigger scheduler trigger))
60+
;; second call returns false, no trigger to unschedule
61+
(is (not (cronut/unschedule-trigger scheduler trigger))))
62+
63+
(testing "unschedule by trigger identity"
64+
(is (cronut/unschedule-trigger scheduler "trigger-name2" "group1"))
65+
;; second call returns false, no trigger to unschedule
66+
(is (not (cronut/unschedule-trigger scheduler "trigger-name2" "group1"))))
67+
68+
(testing "delete by trigger"
69+
(is (cronut/delete-job scheduler trigger3))
3070

31-
(is (cronut/unschedule-job scheduler trigger))
71+
;; second call returns false, no job to delete
72+
(is (not (cronut/delete-job scheduler trigger3))))
3273

33-
;; second call returns false, no job to unschedule
34-
(is (not (cronut/unschedule-job scheduler trigger)))))
74+
(testing "delete by job identity"
75+
(is (cronut/delete-job scheduler "name4" "group2"))
76+
;; second call returns false, no job to unschedule
77+
(is (not (cronut/delete-job scheduler "name4" "group2"))))))

cronut/src/cronut.clj

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
(ns cronut
22
(:refer-clojure :exclude [proxy])
33
(:require [clojure.tools.logging :as log]
4-
[cronut.job :as job])
5-
(:import (org.quartz JobDetail JobKey Scheduler Trigger TriggerBuilder TriggerKey)
4+
[cronut.job :as job]
5+
[cronut.trigger :as trigger])
6+
(:import (org.quartz JobDetail JobKey Scheduler Trigger TriggerBuilder)
67
(org.quartz.impl StdSchedulerFactory)))
78

89
(defn scheduler
@@ -57,40 +58,41 @@
5758

5859
(defn pause-job
5960
([^Scheduler scheduler name group]
60-
(.pauseJob scheduler (JobKey. name group)))
61+
(.pauseJob scheduler (job/key name group)))
6162
([^Scheduler scheduler ^Trigger trigger]
6263
(.pauseJob scheduler (.getJobKey trigger))))
6364

6465
(defn resume-job
6566
([^Scheduler scheduler name group]
66-
(.resumeJob scheduler (JobKey. name group)))
67+
(.resumeJob scheduler (job/key name group)))
6768
([^Scheduler scheduler ^Trigger trigger]
6869
(.resumeJob scheduler (.getJobKey trigger))))
6970

70-
(defn unschedule-job
71-
([^Scheduler scheduler name group]
72-
(.unscheduleJob scheduler (TriggerKey. name group)))
73-
([^Scheduler scheduler ^Trigger trigger]
74-
(.unscheduleJob scheduler (.getKey trigger))))
75-
7671
(defn delete-job
7772
([^Scheduler scheduler name group]
78-
(.deleteJob scheduler (JobKey. name group)))
73+
(.deleteJob scheduler (job/key name group)))
7974
([^Scheduler scheduler ^Trigger trigger]
8075
(.deleteJob scheduler (.getJobKey trigger))))
8176

8277
(defn pause-trigger
8378
([^Scheduler scheduler name group]
84-
(.pauseTrigger scheduler (TriggerKey. name group)))
79+
(.pauseTrigger scheduler (trigger/key name group)))
8580
([^Scheduler scheduler ^Trigger trigger]
8681
(.pauseTrigger scheduler (.getKey trigger))))
8782

8883
(defn resume-trigger
8984
([^Scheduler scheduler name group]
90-
(.resumeTrigger scheduler (TriggerKey. name group)))
85+
(.resumeTrigger scheduler (trigger/key name group)))
9186
([^Scheduler scheduler ^Trigger trigger]
9287
(.resumeTrigger scheduler (.getKey trigger))))
9388

89+
;; unschedule-trigger rather than unschedule-job because it works on trigger identity
90+
(defn unschedule-trigger
91+
([^Scheduler scheduler name group]
92+
(.unscheduleJob scheduler (trigger/key name group)))
93+
([^Scheduler scheduler ^Trigger trigger]
94+
(.unscheduleJob scheduler (.getKey trigger))))
95+
9496
(defn start
9597
[^Scheduler scheduler]
9698
(.start scheduler)

cronut/src/cronut/job.clj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(ns cronut.job
2-
(:import (org.quartz DisallowConcurrentExecution Job JobBuilder JobDataMap JobExecutionException)
2+
(:refer-clojure :exclude [key])
3+
(:import (org.quartz DisallowConcurrentExecution Job JobBuilder JobDataMap JobExecutionException JobKey)
34
(org.quartz.spi JobFactory TriggerFiredBundle)))
45

56
(defrecord ^{DisallowConcurrentExecution true} SerialProxyJob [proxied-job]
@@ -45,3 +46,9 @@
4546
description (.withDescription description)
4647
(boolean? recover?) (.requestRecovery recover?)
4748
(boolean? durable?) (.storeDurably durable?)))))
49+
50+
(defn key
51+
([name]
52+
(key name nil))
53+
([name group]
54+
(JobKey. name group)))

cronut/src/cronut/trigger.clj

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(ns cronut.trigger
2+
(:refer-clojure :exclude [key])
23
(:import (java.util TimeZone)
3-
(org.quartz CronScheduleBuilder SimpleScheduleBuilder TriggerBuilder)))
4+
(org.quartz CronScheduleBuilder SimpleScheduleBuilder TriggerBuilder TriggerKey)))
45

56
(defn base-builder
67
"Provide a base trigger-builder from configuration"
@@ -71,4 +72,10 @@
7172
"Trigger on a schedule defined by the cron expression"
7273
[cron]
7374
(builder {:type :cron
74-
:cron cron}))
75+
:cron cron}))
76+
77+
(defn key
78+
([name]
79+
(key name nil))
80+
([name group]
81+
(TriggerKey. name group)))

cronut/test/cronut_test.clj

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(ns cronut-test
2-
(:require [clojure.test :refer [deftest is]]
2+
(:require [clojure.test :refer [deftest is testing]]
33
[clojure.tools.logging :as log]
44
[cronut :as cronut]
55
[cronut.trigger :as trigger])
@@ -22,13 +22,56 @@
2222
_ (cronut/clear scheduler)
2323
trigger (cronut/schedule-job scheduler
2424
(trigger/interval 2000)
25-
(map->TestDefrecordJobImpl {:identity ["name1" "group2"]
25+
(map->TestDefrecordJobImpl {:identity ["name1" "group1"]
2626
:description "test job"
2727
:recover? true
28+
:durable? false}))
29+
trigger2 (cronut/schedule-job scheduler
30+
(trigger/builder {:type :simple
31+
:interval 3000
32+
:time-unit :millis
33+
:repeat :forever
34+
:identity ["trigger-name2" "group1"]})
35+
(map->TestDefrecordJobImpl {:identity ["name2" "group2"]
36+
:description "test job"
37+
:recover? true
38+
:durable? true}))
39+
trigger3 (cronut/schedule-job scheduler
40+
(cronut.trigger/cron "*/8 * * * * ?")
41+
(map->TestDefrecordJobImpl {:identity ["name3" "group2"]
42+
:description "test job"
43+
:recover? false
44+
:durable? true}))
45+
trigger4 (cronut/schedule-job scheduler
46+
(trigger/builder {:type :cron
47+
:cron "*/5 * * * * ?"
48+
:identity ["trigger-name4" "group2"]})
49+
(map->TestDefrecordJobImpl {:identity ["name4" "group2"]
50+
:description "test job"
51+
:recover? false
2852
:durable? false}))]
2953
(is (instance? Trigger trigger))
54+
(is (instance? Trigger trigger2))
55+
(is (instance? Trigger trigger3))
56+
(is (instance? Trigger trigger4))
57+
58+
(testing "unschedule by trigger"
59+
(is (cronut/unschedule-trigger scheduler trigger))
60+
;; second call returns false, no trigger to unschedule
61+
(is (not (cronut/unschedule-trigger scheduler trigger))))
62+
63+
(testing "unschedule by trigger identity"
64+
(is (cronut/unschedule-trigger scheduler "trigger-name2" "group1"))
65+
;; second call returns false, no trigger to unschedule
66+
(is (not (cronut/unschedule-trigger scheduler "trigger-name2" "group1"))))
67+
68+
(testing "delete by trigger"
69+
(is (cronut/delete-job scheduler trigger3))
3070

31-
(is (cronut/unschedule-job scheduler trigger))
71+
;; second call returns false, no job to delete
72+
(is (not (cronut/delete-job scheduler trigger3))))
3273

33-
;; second call returns false, no job to unschedule
34-
(is (not (cronut/unschedule-job scheduler trigger)))))
74+
(testing "delete by job identity"
75+
(is (cronut/delete-job scheduler "name4" "group2"))
76+
;; second call returns false, no job to unschedule
77+
(is (not (cronut/delete-job scheduler "name4" "group2"))))))

0 commit comments

Comments
 (0)