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.
- data/lib/jetty_rails/adapters/rails_jms_adapter.rb +107 -0
- metadata +2 -1
@@ -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.
|
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
|