techwhizbang-jruby-quartz 0.2 → 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +8 -13
- data/lib/base_scheduler.rb +10 -16
- data/lib/jruby-quartz.rb +1 -1
- data/test/integration/jruby_quartz_integration_test.rb +8 -6
- data/test/unit/base_scheduler_test.rb +27 -19
- metadata +3 -2
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== Instructions
|
4
4
|
|
5
|
-
Requires the following jars in your application container
|
5
|
+
Requires the following jars in your application container and if running with just jruby place these in your $JRUBY_HOME/lib
|
6
6
|
|
7
7
|
commons-collections-3.2.x.jar
|
8
8
|
commons-logging.jar
|
@@ -30,13 +30,11 @@ cron expression representing the frequency of the job(s) you want to with it:
|
|
30
30
|
|
31
31
|
class IntegrationScheduler < BaseScheduler
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
def initialize
|
33
|
+
def initialize(cron_expression)
|
36
34
|
super
|
35
|
+
@cron_expression = cron_expression
|
37
36
|
@base_jobs_group = "IntegrationJobs"
|
38
37
|
@base_triggers_group = "IntegrationTriggers"
|
39
|
-
@cron_expression = "0 0/1 * * * ?"
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
@@ -57,14 +55,11 @@ Notice the Rails.env /container/, I defined custom environments that only run wh
|
|
57
55
|
inside a Java container so that the schedule! method doesn't get fired off during
|
58
56
|
testing.
|
59
57
|
|
60
|
-
****If you don't do this the schedule! method is fired off a Quartz thread pool
|
61
|
-
is spun up.****
|
62
58
|
|
63
|
-
if RUBY_PLATFORM =~ /java/
|
59
|
+
if RUBY_PLATFORM =~ /java/
|
64
60
|
|
65
|
-
|
66
|
-
|
67
|
-
LoggerTwoScheduler.instance.schedule!(Jobs::LoggerTwoJob)
|
61
|
+
LoggerOneScheduler.new("0 0/1 * * * ?").schedule!(Jobs::LoggerOneJob)
|
62
|
+
LoggerTwoScheduler.new("0 0/2 * * * ?").schedule!(Jobs::LoggerTwoJob)
|
68
63
|
|
69
64
|
end
|
70
65
|
|
@@ -75,5 +70,5 @@ only with Rails 2.2 or higher because thread safety == 1 runtime
|
|
75
70
|
|
76
71
|
=== Other
|
77
72
|
|
78
|
-
Problems, comments, and suggestions all welcome.
|
79
|
-
http://techwhizbang.com
|
73
|
+
Problems, comments, and suggestions all welcome. techwhizbang@gmail.com or visit my blog
|
74
|
+
http://techwhizbang.com
|
data/lib/base_scheduler.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
1
|
import org.quartz.SchedulerFactory
|
4
2
|
import org.quartz.SchedulerException
|
5
3
|
import org.quartz.Scheduler
|
@@ -9,11 +7,19 @@ import org.quartz.SimpleTrigger
|
|
9
7
|
import org.quartz.impl.StdSchedulerFactory
|
10
8
|
|
11
9
|
class BaseScheduler
|
12
|
-
include Singleton
|
13
10
|
attr_reader :scheduler_factory
|
14
11
|
|
15
12
|
attr_accessor :base_jobs_group, :base_triggers_group
|
16
13
|
attr_accessor :job_name, :trigger_name, :cron_expression
|
14
|
+
|
15
|
+
def initialize(cron_expression)
|
16
|
+
@scheduler_factory = initialize_scheduler_factory
|
17
|
+
@base_jobs_group = "BaseJobsGroup"
|
18
|
+
@base_triggers_group = "BaseTriggersGroup"
|
19
|
+
@job_name = "BaseJob"
|
20
|
+
@trigger_name = "BaseTrigger"
|
21
|
+
@cron_expression = cron_expression
|
22
|
+
end
|
17
23
|
|
18
24
|
def fire!(job_class, options={})
|
19
25
|
raise "Not implemented yet"
|
@@ -21,7 +27,7 @@ class BaseScheduler
|
|
21
27
|
|
22
28
|
def schedule!(job_class, options={})
|
23
29
|
begin
|
24
|
-
scheduler =
|
30
|
+
scheduler = scheduler_factory.get_scheduler
|
25
31
|
scheduler.set_job_factory(job_factory.new)
|
26
32
|
detail = job_detail.new(self.job_name,
|
27
33
|
self.base_jobs_group,
|
@@ -62,18 +68,6 @@ class BaseScheduler
|
|
62
68
|
CronTrigger
|
63
69
|
end
|
64
70
|
|
65
|
-
private
|
66
|
-
|
67
|
-
def initialize
|
68
|
-
super
|
69
|
-
@scheduler_factory = initialize_scheduler_factory
|
70
|
-
@base_jobs_group = "BaseJobsGroup"
|
71
|
-
@base_triggers_group = "BaseTriggersGroup"
|
72
|
-
@job_name = "BaseJob"
|
73
|
-
@trigger_name = "BaseTrigger"
|
74
|
-
@cron_expression = "0 0/1 * * * ?"
|
75
|
-
end
|
76
|
-
|
77
71
|
class SchedulerError < StandardError; end
|
78
72
|
|
79
73
|
end
|
data/lib/jruby-quartz.rb
CHANGED
@@ -2,13 +2,13 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class IntegrationScheduler < BaseScheduler
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
def initialize
|
5
|
+
def initialize(cron_expression)
|
8
6
|
super
|
7
|
+
@job_name = "IntegrationJob"
|
8
|
+
@trigger_name = "IntegrationTrigger"
|
9
9
|
@base_jobs_group = "IntegrationJobs"
|
10
10
|
@base_triggers_group = "IntegrationTriggers"
|
11
|
-
@cron_expression =
|
11
|
+
@cron_expression = cron_expression
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -23,6 +23,8 @@ end
|
|
23
23
|
class JrubyQuartzIntegrationTest < Test::Unit::TestCase
|
24
24
|
|
25
25
|
def test_scheduler_implementation
|
26
|
+
integration_scheduler = IntegrationScheduler.new "0 0/1 * * * ?"
|
27
|
+
|
26
28
|
#must stub the scheduler and scheduler factory to avoid invokation of real Quartz thread pool, etc.
|
27
29
|
scheduler = mock('scheduler')
|
28
30
|
scheduler_factory = mock('scheduler factory', :get_scheduler => scheduler)
|
@@ -30,7 +32,7 @@ class JrubyQuartzIntegrationTest < Test::Unit::TestCase
|
|
30
32
|
scheduler.expects(:schedule_job)
|
31
33
|
scheduler.expects(:set_job_factory)
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
+
integration_scheduler.expects(:scheduler_factory).returns(scheduler_factory)
|
36
|
+
integration_scheduler.schedule!(IntegrationJob)
|
35
37
|
end
|
36
38
|
end
|
@@ -2,42 +2,49 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class BaseSchedulerTest < Test::Unit::TestCase
|
4
4
|
|
5
|
-
def test_singleton_initialization
|
6
|
-
assert_raise(NoMethodError) { BaseScheduler.new }
|
7
|
-
assert_not_nil(BaseScheduler.instance)
|
8
|
-
end
|
5
|
+
# def test_singleton_initialization
|
6
|
+
# assert_raise(NoMethodError) { BaseScheduler.new }
|
7
|
+
# assert_not_nil(BaseScheduler.instance)
|
8
|
+
# end
|
9
9
|
|
10
10
|
def test_scheduler_instance_variables
|
11
|
-
|
12
|
-
assert_equal
|
13
|
-
assert_equal
|
14
|
-
assert_equal
|
15
|
-
assert_equal
|
11
|
+
scheduler = BaseScheduler.new "0 0/1 * * * ?"
|
12
|
+
assert_equal scheduler.base_jobs_group, "BaseJobsGroup"
|
13
|
+
assert_equal scheduler.job_name, "BaseJob"
|
14
|
+
assert_equal scheduler.base_triggers_group, "BaseTriggersGroup"
|
15
|
+
assert_equal scheduler.trigger_name, "BaseTrigger"
|
16
|
+
assert_equal scheduler.cron_expression, "0 0/1 * * * ?"
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_trigger_class
|
19
|
-
|
20
|
+
scheduler = BaseScheduler.new stub
|
21
|
+
assert_kind_of(org.quartz.SimpleTrigger, scheduler.send(:trigger).new)
|
20
22
|
end
|
21
23
|
|
22
24
|
def test_job_factory_class
|
23
|
-
|
25
|
+
scheduler = BaseScheduler.new stub
|
26
|
+
assert_kind_of(Jobs::BaseJobFactory, scheduler.send(:job_factory).new)
|
24
27
|
end
|
25
28
|
|
26
29
|
def test_job_detail_class
|
27
|
-
|
30
|
+
scheduler = BaseScheduler.new stub
|
31
|
+
assert_kind_of(Jobs::BaseJobDetail, scheduler.send(:job_detail).new("JobName",
|
28
32
|
'JobGroup',
|
29
33
|
'JobClass'))
|
30
34
|
end
|
31
35
|
|
32
36
|
def test_scheduler_factory_class
|
33
|
-
|
37
|
+
scheduler = BaseScheduler.new stub
|
38
|
+
assert_kind_of(StdSchedulerFactory, scheduler.send(:initialize_scheduler_factory))
|
34
39
|
end
|
35
40
|
|
36
41
|
def test_cron_trigger_class
|
37
|
-
|
42
|
+
scheduler = BaseScheduler.new stub
|
43
|
+
assert_kind_of(CronTrigger, scheduler.send(:cron_trigger).new)
|
38
44
|
end
|
39
45
|
|
40
46
|
def test_schedule_method
|
47
|
+
base_scheduler = BaseScheduler.new stub
|
41
48
|
base_job = mock("base job")
|
42
49
|
scheduler = mock('scheduler')
|
43
50
|
job_factory = mock('job factory')
|
@@ -45,6 +52,8 @@ class BaseSchedulerTest < Test::Unit::TestCase
|
|
45
52
|
cron_trigger = mock('cron trigger')
|
46
53
|
scheduler_factory = mock('scheduler factory', :get_scheduler => scheduler)
|
47
54
|
|
55
|
+
base_scheduler.expects(:scheduler_factory).returns(scheduler_factory)
|
56
|
+
|
48
57
|
job_factory.expects(:new).returns(job_factory)
|
49
58
|
base_job.expects(:new).returns(base_job)
|
50
59
|
job_detail.expects(:new).returns(job_detail)
|
@@ -52,11 +61,10 @@ class BaseSchedulerTest < Test::Unit::TestCase
|
|
52
61
|
|
53
62
|
scheduler.expects(:set_job_factory).with(job_factory)
|
54
63
|
scheduler.expects(:schedule_job).with(job_detail, cron_trigger)
|
55
|
-
BaseScheduler.instance.expects(:scheduler_factory).returns(scheduler_factory)
|
56
64
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
65
|
+
base_scheduler.stubs(:job_detail).returns(job_detail)
|
66
|
+
base_scheduler.stubs(:job_factory).returns(job_factory)
|
67
|
+
base_scheduler.stubs(:cron_trigger).returns(cron_trigger)
|
68
|
+
base_scheduler.schedule!(base_job)
|
61
69
|
end
|
62
70
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: techwhizbang-jruby-quartz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0
|
4
|
+
version: "1.0"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Zalabak
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- Rakefile
|
40
40
|
has_rdoc: true
|
41
41
|
homepage: http://techwhizbang.com
|
42
|
+
licenses:
|
42
43
|
post_install_message:
|
43
44
|
rdoc_options:
|
44
45
|
- --title
|
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
64
|
requirements: []
|
64
65
|
|
65
66
|
rubyforge_project:
|
66
|
-
rubygems_version: 1.
|
67
|
+
rubygems_version: 1.3.5
|
67
68
|
signing_key:
|
68
69
|
specification_version: 2
|
69
70
|
summary: A JRuby implementation of the Quartz scheduling framework that makes it easy to integrate into Ruby and Rails based projects.
|