modern_times 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/README.rdoc +24 -12
  2. data/Rakefile +2 -2
  3. data/VERSION +1 -1
  4. data/examples/README +4 -0
  5. data/examples/jms.yml +9 -0
  6. data/examples/requestor/README +4 -2
  7. data/examples/requestor/manager.rb +3 -2
  8. data/examples/requestor/request.rb +5 -4
  9. data/examples/requestor/reverse_echo_worker.rb +3 -2
  10. data/examples/simple/README +7 -4
  11. data/examples/simple/bar_worker.rb +4 -1
  12. data/examples/simple/baz_worker.rb +4 -3
  13. data/examples/simple/manager.rb +3 -2
  14. data/examples/simple/publish.rb +6 -5
  15. data/lib/modern_times.rb +20 -2
  16. data/lib/modern_times/base/supervisor.rb +14 -21
  17. data/lib/modern_times/base/supervisor_mbean.rb +4 -6
  18. data/lib/modern_times/base/worker.rb +17 -26
  19. data/lib/modern_times/jms.rb +23 -0
  20. data/lib/modern_times/{hornetq/client.rb → jms/connection.rb} +19 -12
  21. data/lib/modern_times/jms/publisher.rb +91 -0
  22. data/lib/modern_times/jms/supervisor.rb +19 -0
  23. data/lib/modern_times/jms/supervisor_mbean.rb +11 -0
  24. data/lib/modern_times/jms/worker.rb +166 -0
  25. data/lib/modern_times/jms_requestor.rb +10 -0
  26. data/lib/modern_times/jms_requestor/request_handle.rb +33 -0
  27. data/lib/modern_times/jms_requestor/requestor.rb +45 -0
  28. data/lib/modern_times/jms_requestor/supervisor.rb +45 -0
  29. data/lib/modern_times/jms_requestor/supervisor_mbean.rb +21 -0
  30. data/lib/modern_times/jms_requestor/worker.rb +78 -0
  31. data/lib/modern_times/manager.rb +14 -9
  32. data/lib/modern_times/manager_mbean.rb +14 -7
  33. data/lib/modern_times/marshal_strategy.rb +47 -0
  34. data/lib/modern_times/marshal_strategy/bson.rb +31 -0
  35. data/lib/modern_times/marshal_strategy/json.rb +30 -0
  36. data/lib/modern_times/marshal_strategy/ruby.rb +20 -0
  37. data/lib/modern_times/marshal_strategy/string.rb +19 -0
  38. data/lib/modern_times/railsable.rb +17 -74
  39. data/test/base_test.rb +248 -0
  40. data/test/jms.yml +8 -0
  41. data/test/jms_requestor_test.rb +263 -0
  42. data/test/jms_test.rb +296 -0
  43. data/test/marshal_strategy_test.rb +39 -0
  44. metadata +49 -46
  45. data/examples/requestor/hornetq.yml +0 -14
  46. data/examples/simple/hornetq.yml +0 -14
  47. data/lib/modern_times/hornetq.rb +0 -11
  48. data/lib/modern_times/hornetq/marshal_strategy.rb +0 -3
  49. data/lib/modern_times/hornetq/marshal_strategy/json.rb +0 -17
  50. data/lib/modern_times/hornetq/marshal_strategy/ruby.rb +0 -17
  51. data/lib/modern_times/hornetq/marshal_strategy/string.rb +0 -17
  52. data/lib/modern_times/hornetq/publisher.rb +0 -65
  53. data/lib/modern_times/hornetq/supervisor.rb +0 -22
  54. data/lib/modern_times/hornetq/supervisor_mbean.rb +0 -12
  55. data/lib/modern_times/hornetq/worker.rb +0 -127
  56. data/lib/modern_times/hornetq_requestor.rb +0 -9
  57. data/lib/modern_times/hornetq_requestor/request_handle.rb +0 -49
  58. data/lib/modern_times/hornetq_requestor/requestor.rb +0 -48
  59. data/lib/modern_times/hornetq_requestor/worker.rb +0 -29
  60. data/lib/modern_times/thread.rb +0 -16
  61. data/test/base/worker_test.rb +0 -38
  62. data/test/messaging/worker_manager_test.rb +0 -58
  63. data/test/messaging/worker_test.rb +0 -58
  64. data/test/worker_manager_test.rb +0 -48
@@ -1,29 +0,0 @@
1
- module ModernTimes
2
- module HornetQRequestor
3
-
4
- # Base Worker Class for any class that will be processing messages from queues
5
- class Worker < ModernTimes::HornetQ::Worker
6
- # Make HornetQRequestor::Supervisor our supervisor
7
- #supervisor Supervisor
8
-
9
- def on_message(message)
10
- @reply_queue = message.get_string_property(Java::OrgHornetqCoreClientImpl::ClientMessageImpl::REPLYTO_HEADER_NAME)
11
- @message_id = message.get_string_property(MESSAGE_ID)
12
- super
13
- end
14
-
15
- def perform(object)
16
- response = request(object)
17
- session.producer(@reply_queue) do |producer|
18
- reply_message = marshal(session, response, false)
19
- reply_message.put_string_property(MESSAGE_ID, @message_id)
20
- producer.send_with_retry(reply_message)
21
- end
22
- end
23
-
24
- def request(object)
25
- raise "#{self}: Need to override request method in #{self.class.name} in order to act on #{object}"
26
- end
27
- end
28
- end
29
- end
@@ -1,16 +0,0 @@
1
- module ModernTimes
2
- class Thread < ::Thread
3
- def initialize(&block)
4
- super() do
5
- begin
6
- yield
7
- rescue => e
8
- ModernTimes.logger.fatal("Thread #{self} died due to exception #{e.message}\n#{e.backtrace.join("\n")}")
9
- ensure
10
- ActiveRecord::Base.clear_active_connections!() if Module.const_get('ActiveRecord') rescue nil
11
- ModernTimes.logger.flush if ModernTimes.logger.respond_to?(:flush)
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,38 +0,0 @@
1
- require 'modern_times'
2
- require 'shoulda'
3
- require 'test/unit'
4
-
5
- class DummyWorker < ModernTimes::Base::Worker
6
- end
7
-
8
- module Base
9
- class WorkerTest < Test::Unit::TestCase
10
-
11
- context 'a worker with no name specified' do
12
- setup do
13
- @worker = DummyWorker.new
14
- @worker.index = 2
15
- @worker.thread = 'dummy thread'
16
- @supervisor = DummyWorker.create_supervisor('dummy_manager')
17
- end
18
-
19
- should "have default name and proper supervisor and attributes" do
20
- assert_equal('Dummy', @worker.name)
21
- assert_equal(2, @worker.index)
22
- assert_equal('dummy thread', @worker.thread)
23
- assert_equal(ModernTimes::Base::Supervisor, @supervisor.class)
24
- assert_equal('dummy_manager', @supervisor.manager)
25
- end
26
- end
27
-
28
- context 'a worker with name specified' do
29
- setup do
30
- @worker = DummyWorker.new(:name => 'Foo')
31
- end
32
-
33
- should "have name specified and proper supervisor and attributes" do
34
- assert_equal('Foo', @worker.name)
35
- end
36
- end
37
- end
38
- end
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
-
3
- class DummyDefaultWorker < Messaging::Worker
4
- end
5
-
6
- module Dummy
7
- class DefaultWorker < Messaging::Worker
8
- end
9
- end
10
-
11
- class DummyDefaultWorkerWithSpecifiedNames < Messaging::Worker
12
- address :MyAddressName
13
- queue :MyQueueName
14
- end
15
-
16
- module Messaging
17
- class WorkerManagerTest < ActiveSupport::TestCase
18
-
19
- context 'a default worker' do
20
- setup do
21
- @worker = DummyDefaultWorker.new
22
- @worker.message = 'foo'
23
- @worker.session = 'dummy session'
24
- @worker.thread_number = 4
25
- end
26
-
27
- should "have address and queue names derived from it's class name" do
28
- assert_equal(@worker.address_name, 'DummyDefault')
29
- assert_equal(@worker.queue_name, 'DummyDefault')
30
- assert_equal(@worker.message, 'foo')
31
- assert_equal(@worker.session, 'dummy session')
32
- assert_equal(@worker.thread_number, 4)
33
- end
34
- end
35
-
36
- context 'a default worker in a namespace' do
37
- setup do
38
- @worker = Dummy::DefaultWorker.new
39
- end
40
-
41
- should "have address and queue names derived from it's class name" do
42
- assert_equal(@worker.address_name, 'Dummy_Default')
43
- assert_equal(@worker.queue_name, 'Dummy_Default')
44
- end
45
- end
46
-
47
- context 'a worker with specified names' do
48
- setup do
49
- @worker = DummyDefaultWorkerWithSpecifiedNames.new
50
- end
51
-
52
- should "have address and queue names matching the specified names" do
53
- assert_equal(@worker.address_name, 'MyAddressName')
54
- assert_equal(@worker.queue_name, 'MyQueueName')
55
- end
56
- end
57
- end
58
- end
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
-
3
- class DummyDefaultWorker < Messaging::Worker
4
- end
5
-
6
- module Dummy
7
- class DefaultWorker < Messaging::Worker
8
- end
9
- end
10
-
11
- class DummyDefaultWorkerWithSpecifiedNames < Messaging::Worker
12
- address :MyAddressName
13
- queue :MyQueueName
14
- end
15
-
16
- module Messaging
17
- class WorkerTest < ActiveSupport::TestCase
18
-
19
- context 'a default worker' do
20
- setup do
21
- @worker = DummyDefaultWorker.new
22
- @worker.message = 'foo'
23
- @worker.session = 'dummy session'
24
- @worker.thread_number = 4
25
- end
26
-
27
- should "have address and queue names derived from it's class name" do
28
- assert_equal(@worker.address_name, 'DummyDefault')
29
- assert_equal(@worker.queue_name, 'DummyDefault')
30
- assert_equal(@worker.message, 'foo')
31
- assert_equal(@worker.session, 'dummy session')
32
- assert_equal(@worker.thread_number, 4)
33
- end
34
- end
35
-
36
- context 'a default worker in a namespace' do
37
- setup do
38
- @worker = Dummy::DefaultWorker.new
39
- end
40
-
41
- should "have address and queue names derived from it's class name" do
42
- assert_equal(@worker.address_name, 'Dummy_Default')
43
- assert_equal(@worker.queue_name, 'Dummy_Default')
44
- end
45
- end
46
-
47
- context 'a worker with specified names' do
48
- setup do
49
- @worker = DummyDefaultWorkerWithSpecifiedNames.new
50
- end
51
-
52
- should "have address and queue names matching the specified names" do
53
- assert_equal(@worker.address_name, 'MyAddressName')
54
- assert_equal(@worker.queue_name, 'MyQueueName')
55
- end
56
- end
57
- end
58
- end
@@ -1,48 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
- require 'modern_times'
5
- require 'range_queue_strategy'
6
- require 'range_queue_worker'
7
-
8
- class WorkerManagerTest < Test::Unit::TestCase
9
- context 'on single strategy' do
10
- setup do
11
- @range = 1..100
12
- end
13
-
14
- should 'work' do
15
- strategy = RangeQueueStrategy.new(@range)
16
- manager = ModernTimes::WorkerManager.new
17
- worker = RangeQueueWorker.new
18
- thread_count = 10
19
- manager.add(strategy, worker, thread_count, 1)
20
- sleep(2)
21
- manager.stop
22
- assert_equal @range.to_a, worker.results.sort
23
- end
24
- end
25
-
26
- context 'on multiple strategies' do
27
- setup do
28
- @ranges = [1..100, 101..200, 201..300]
29
- end
30
-
31
- should 'work' do
32
- [nil, 1].each do |poll_sleep|
33
- strategies = @ranges.map {|range| RangeQueueStrategy.new(range) }
34
- manager = ModernTimes::WorkerManager.new
35
- workers = [RangeQueueWorker.new, RangeQueueWorker.new, RangeQueueWorker.new]
36
- thread_count = 10
37
- strategies.each_index do |i|
38
- manager.add(strategies[i], workers[i], thread_count, poll_sleep)
39
- end
40
- sleep(2)
41
- manager.stop
42
- strategies.each_index do |i|
43
- assert_equal @ranges[i].to_a, workers[i].results.sort
44
- end
45
- end
46
- end
47
- end
48
- end