modern_times 0.1.2 → 0.2.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.
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