mikewadhera-jetty-rails 0.9.1 → 0.9.2

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.
@@ -0,0 +1,107 @@
1
+ module JettyRails
2
+ module Adapters
3
+
4
+ # This adapter extends the standard Rails adapter with
5
+ # an additional listener for JMS queues
6
+ class RailsJmsAdapter < RailsAdapter
7
+
8
+ # Defaults to using OpenMQ, expects jars in lib_dir/jms_dir at startup
9
+ @@defaults = {
10
+ :jms_dir => "jms",
11
+ :connection_factory_class => "com.sun.messaging.ConnectionFactory",
12
+ :queue_class => "com.sun.messaging.Queue",
13
+ :queue_name => "rails_queue"
14
+ }
15
+
16
+ def initialize(config)
17
+ super @@defaults.merge(config)
18
+ require_jms_jars()
19
+ end
20
+
21
+ def event_listeners
22
+ super << Rack::JMS::QueueContextListener.new(queue_manager_factory())
23
+ end
24
+
25
+ def queue_manager_factory
26
+ factory = jndiless_default_queue_manager_factory_class()
27
+ factory.connection_factory_class = config[:connection_factory_class]
28
+ factory.queue_class = config[:queue_class]
29
+ factory.queue_name = config[:queue_name]
30
+ factory.new
31
+ end
32
+
33
+ protected
34
+
35
+ def jms_jars_path
36
+ File.join(config[:base], config[:lib_dir], config[:jms_dir])
37
+ end
38
+
39
+ def require_jms_jars
40
+ Dir["#{self.jms_jars_path}/*.jar"].each {|jar| require jar }
41
+ end
42
+
43
+ # JRuby Rack's DefaultQueueManager uses JNDI for discovery
44
+ # JNDI is overkill for embedded servers like Jetty Rails
45
+ #
46
+ # This method returns a custom Rack::JMS::QueueManagerFactory
47
+ # which produces a JNDI-less Rack::JMS::DefaultQueueManager
48
+ def jndiless_default_queue_manager_factory_class
49
+ factory_class = Class.new
50
+ factory_class.send :cattr_accessor, :connection_factory_class,
51
+ :queue_class,
52
+ :queue_name
53
+
54
+ # Implement Rack::JMS::QueueManagerFactory Interface
55
+ factory_class.send :include, Rack::JMS::QueueManagerFactory
56
+ factory_class.module_eval(<<-EOS)
57
+
58
+ def newQueueManager
59
+ manager_class = Class.new Rack::JMS::DefaultQueueManager
60
+
61
+ manager_class.send :field_accessor, :context,
62
+ :connectionFactory
63
+
64
+ manager_class.send :attr_accessor, :connection_factory_class,
65
+ :queue_class,
66
+ :queue_name
67
+
68
+ # Overrides JNDI parts of DefaultQueueManager
69
+ manager_class.module_eval do
70
+
71
+ # Overrides in order to initialize connection factory w/o JNDI
72
+ def init(context)
73
+ self.context = context
74
+ unless self.connectionFactory
75
+ import self.connection_factory_class
76
+ factory = eval(self.connection_factory_class).new
77
+ self.connectionFactory = factory
78
+ end
79
+ end
80
+
81
+ # Overrides in order to perform lookup of queue w/o JNDI
82
+ def lookup(name)
83
+ if name == self.queue_name
84
+ @jndiless_queue ||=
85
+ eval(self.queue_class).new(self.queue_name)
86
+ else
87
+ super(name)
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ returning manager_class.new do |m|
94
+ m.connection_factory_class = self.class.connection_factory_class
95
+ m.queue_class = self.class.queue_class
96
+ m.queue_name = self.class.queue_name
97
+ end
98
+ end
99
+ EOS
100
+
101
+ factory_class
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mikewadhera-jetty-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Kung
@@ -70,6 +70,7 @@ files:
70
70
  - lib/jetty_rails/adapters/abstract_adapter.rb
71
71
  - lib/jetty_rails/adapters/merb_adapter.rb
72
72
  - lib/jetty_rails/adapters/rails_adapter.rb
73
+ - lib/jetty_rails/adapters/rails_jms_adapter.rb
73
74
  - lib/jetty_rails/config/command_line_reader.rb
74
75
  - lib/jetty_rails/config/rdoc_fix.rb
75
76
  - lib/jetty_rails/handler/delegate_on_errors_handler.rb