torquebox-messaging 3.2.0-java → 4.0.0.alpha1-java
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.
- checksums.yaml +4 -4
- data/lib/torquebox-messaging.rb +19 -20
- data/lib/torquebox/messaging.rb +80 -20
- data/lib/torquebox/messaging/context.rb +174 -0
- data/lib/torquebox/messaging/destination.rb +164 -215
- data/lib/torquebox/messaging/helpers.rb +34 -0
- data/lib/torquebox/messaging/hornetq.rb +70 -0
- data/lib/torquebox/messaging/hornetq/address_settings.rb +228 -0
- data/lib/torquebox/messaging/queue.rb +139 -301
- data/lib/torquebox/messaging/topic.rb +84 -46
- data/lib/wunderboss-jars/hornetq-commons-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/hornetq-core-client-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/hornetq-jms-client-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/hornetq-jms-server-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/hornetq-journal-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/hornetq-native-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/hornetq-server-2.4.5.Final.jar +0 -0
- data/lib/wunderboss-jars/javax.inject-1.jar +0 -0
- data/lib/wunderboss-jars/jboss-common-core-2.2.10.GA.jar +0 -0
- data/lib/wunderboss-jars/jboss-connector-api_1.5_spec-1.0.0.Final.jar +0 -0
- data/lib/wunderboss-jars/jboss-jms-api_2.0_spec-1.0.0.Final.jar +0 -0
- data/lib/wunderboss-jars/jboss-transaction-api_1.1_spec-1.0.0.Final.jar +0 -0
- data/lib/wunderboss-jars/jboss-transaction-spi-7.0.0.Final.jar +0 -0
- data/lib/wunderboss-jars/jnpserver-5.0.3.GA.jar +0 -0
- data/lib/wunderboss-jars/netty-all-4.0.13.Final.jar +0 -0
- data/lib/wunderboss-jars/wunderboss-messaging-1.x.incremental.174.jar +0 -0
- metadata +88 -98
- data/lib/gem_hook.rb +0 -51
- data/lib/hornetq-commons-2.3.1.Final.jar +0 -0
- data/lib/hornetq-core-client-2.3.1.Final.jar +0 -0
- data/lib/hornetq-jms-client-2.3.1.Final.jar +0 -0
- data/lib/hornetq-journal-2.3.1.Final.jar +0 -0
- data/lib/jboss-jms-api_1.1_spec-1.0.1.Final.jar +0 -0
- data/lib/jboss-logging-3.1.2.GA.jar +0 -0
- data/lib/jboss-logmanager-1.4.0.Final.jar +0 -0
- data/lib/jboss-transaction-api_1.1_spec-1.0.1.Final.jar +0 -0
- data/lib/netty-3.6.2.Final.jar +0 -0
- data/lib/org.torquebox.messaging-client.rb +0 -20
- data/lib/torquebox-messaging.jar +0 -0
- data/lib/torquebox/messaging/backgroundable.rb +0 -250
- data/lib/torquebox/messaging/backgroundable_processor.rb +0 -52
- data/lib/torquebox/messaging/connection.rb +0 -74
- data/lib/torquebox/messaging/connection_factory.rb +0 -115
- data/lib/torquebox/messaging/const_missing.rb +0 -28
- data/lib/torquebox/messaging/core.rb +0 -27
- data/lib/torquebox/messaging/datamapper_marshaling.rb +0 -43
- data/lib/torquebox/messaging/echo_processor.rb +0 -35
- data/lib/torquebox/messaging/edn_message.rb +0 -26
- data/lib/torquebox/messaging/ext/javax_jms_queue_browser.rb +0 -25
- data/lib/torquebox/messaging/future.rb +0 -131
- data/lib/torquebox/messaging/future_responder.rb +0 -109
- data/lib/torquebox/messaging/future_status.rb +0 -37
- data/lib/torquebox/messaging/json_message.rb +0 -26
- data/lib/torquebox/messaging/marshal_base64_message.rb +0 -26
- data/lib/torquebox/messaging/marshal_message.rb +0 -43
- data/lib/torquebox/messaging/message.rb +0 -137
- data/lib/torquebox/messaging/message_processor.rb +0 -209
- data/lib/torquebox/messaging/processor_middleware/chain.rb +0 -89
- data/lib/torquebox/messaging/processor_middleware/default_middleware.rb +0 -39
- data/lib/torquebox/messaging/processor_middleware/with_transaction.rb +0 -35
- data/lib/torquebox/messaging/session.rb +0 -173
- data/lib/torquebox/messaging/task.rb +0 -66
- data/lib/torquebox/messaging/text_message.rb +0 -36
- data/lib/torquebox/messaging/xa_connection.rb +0 -55
- data/lib/torquebox/messaging/xa_connection_factory.rb +0 -45
- data/lib/torquebox/messaging/xa_session.rb +0 -51
- data/licenses/cc0-1.0.txt +0 -121
- data/spec/backgroundable_spec.rb +0 -319
- data/spec/chain_spec.rb +0 -160
- data/spec/datamapper_marshaling_spec.rb +0 -25
- data/spec/default_middleware_spec.rb +0 -21
- data/spec/destination_spec.rb +0 -248
- data/spec/future_responder_spec.rb +0 -81
- data/spec/future_spec.rb +0 -163
- data/spec/message_processor_spec.rb +0 -211
- data/spec/message_spec.rb +0 -135
- data/spec/task_spec.rb +0 -111
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/netty-3.6.2.Final.jar
DELETED
Binary file
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# Copyright 2008-2013 Red Hat, Inc, and individual contributors.
|
2
|
-
#
|
3
|
-
# This is free software; you can redistribute it and/or modify it
|
4
|
-
# under the terms of the GNU Lesser General Public License as
|
5
|
-
# published by the Free Software Foundation; either version 2.1 of
|
6
|
-
# the License, or (at your option) any later version.
|
7
|
-
#
|
8
|
-
# This software is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
-
# Lesser General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU Lesser General Public
|
14
|
-
# License along with this software; if not, write to the Free
|
15
|
-
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
|
-
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
|
-
|
18
|
-
# Backwards-compatibility
|
19
|
-
$stderr.puts "Usage of 'org.torquebox.messaging-client' is deprecated. Please use 'torquebox-messaging'."
|
20
|
-
require 'torquebox-messaging'
|
data/lib/torquebox-messaging.jar
DELETED
Binary file
|
@@ -1,250 +0,0 @@
|
|
1
|
-
# Copyright 2008-2013 Red Hat, Inc, and individual contributors.
|
2
|
-
#
|
3
|
-
# This is free software; you can redistribute it and/or modify it
|
4
|
-
# under the terms of the GNU Lesser General Public License as
|
5
|
-
# published by the Free Software Foundation; either version 2.1 of
|
6
|
-
# the License, or (at your option) any later version.
|
7
|
-
#
|
8
|
-
# This software is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
-
# Lesser General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU Lesser General Public
|
14
|
-
# License along with this software; if not, write to the Free
|
15
|
-
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
|
-
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
|
-
|
18
|
-
require 'torquebox/messaging/queue'
|
19
|
-
require 'torquebox/messaging/future'
|
20
|
-
require 'torquebox/messaging/task'
|
21
|
-
require 'torquebox/messaging/future_status'
|
22
|
-
require 'torquebox/injectors'
|
23
|
-
require 'torquebox/logger'
|
24
|
-
|
25
|
-
module TorqueBox
|
26
|
-
module Messaging
|
27
|
-
|
28
|
-
# Backgroundable provides mechanism for executing an object's
|
29
|
-
# methods asynchronously.
|
30
|
-
module Backgroundable
|
31
|
-
# @!parse extend BackgroundableClassMethods
|
32
|
-
|
33
|
-
# @api private
|
34
|
-
MUTEX = Mutex.new
|
35
|
-
|
36
|
-
def self.included(base)
|
37
|
-
base.extend(BackgroundableClassMethods)
|
38
|
-
base.extend(FutureStatus)
|
39
|
-
base.send(:include, FutureStatus)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Signals if the newrelic gem is loaded.
|
43
|
-
def self.newrelic_available?
|
44
|
-
defined?(NewRelic::Agent)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Allows you to background any method that has not been marked
|
48
|
-
# as a backgrounded method via {BackgroundableClassMethods#always_background}.
|
49
|
-
# @param [Hash] options that are passed through to
|
50
|
-
# {TorqueBox::Messaging::Destination#publish}
|
51
|
-
# @return [Future]
|
52
|
-
def background(options = { })
|
53
|
-
BackgroundProxy.new(self, options)
|
54
|
-
end
|
55
|
-
|
56
|
-
module BackgroundableClassMethods
|
57
|
-
|
58
|
-
# Marks methods to always be backgrounded. Takes one or more
|
59
|
-
# method symbols, and an optional options hash as the final
|
60
|
-
# argument. The options allow you to set publish options for
|
61
|
-
# each call.
|
62
|
-
# see TorqueBox::Messaging::Destination#publish
|
63
|
-
def always_background(*methods)
|
64
|
-
options = methods.last.is_a?(Hash) ? methods.pop : {}
|
65
|
-
@__backgroundable_methods ||= {}
|
66
|
-
|
67
|
-
methods.each do |method|
|
68
|
-
method = method.to_s
|
69
|
-
if !@__backgroundable_methods[method]
|
70
|
-
@__backgroundable_methods[method] ||= { }
|
71
|
-
@__backgroundable_methods[method][:options] = options
|
72
|
-
if Util.singleton_methods_include?(self, method) ||
|
73
|
-
Util.instance_methods_include?(self, method)
|
74
|
-
__enable_backgrounding(method)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# Allows you to background any method that has not been marked
|
81
|
-
# as a backgrounded method via {BackgroundableClassMethods#always_background}.
|
82
|
-
# @param [Hash] options that are passed through to
|
83
|
-
# {TorqueBox::Messaging::Destination#publish}
|
84
|
-
# @return [Future]
|
85
|
-
def background(options = { })
|
86
|
-
BackgroundProxy.new(self, options)
|
87
|
-
end
|
88
|
-
|
89
|
-
# @api private
|
90
|
-
def method_added(method)
|
91
|
-
super
|
92
|
-
__method_added(method)
|
93
|
-
end
|
94
|
-
|
95
|
-
# @api private
|
96
|
-
def singleton_method_added(method)
|
97
|
-
super
|
98
|
-
__method_added(method)
|
99
|
-
end
|
100
|
-
|
101
|
-
# @api private
|
102
|
-
def __enable_backgroundable_newrelic_tracing(method)
|
103
|
-
method = method.to_s
|
104
|
-
if Backgroundable.newrelic_available?
|
105
|
-
TorqueBox::Messaging::Backgroundable::MUTEX.synchronize do
|
106
|
-
@__enabled_bg_tracing_methods ||= {}
|
107
|
-
if !@__enabled_bg_tracing_methods[method]
|
108
|
-
include(NewRelic::Agent::Instrumentation::ControllerInstrumentation) unless
|
109
|
-
include?(NewRelic::Agent::Instrumentation::ControllerInstrumentation)
|
110
|
-
begin
|
111
|
-
add_transaction_tracer(method, :name => method.sub("__sync_", ""), :category => :task)
|
112
|
-
rescue Exception => e
|
113
|
-
TorqueBox::Logger.new( Backgroundable ).error "Error loading New Relic for backgrounded method #{method.sub("__sync_", "")}: #{e}"
|
114
|
-
end
|
115
|
-
@__enabled_bg_tracing_methods[method] = true
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
def __method_added(method)
|
124
|
-
method = method.to_s
|
125
|
-
if @__backgroundable_methods &&
|
126
|
-
@__backgroundable_methods[method] &&
|
127
|
-
!@__backgroundable_methods[method][:backgrounding]
|
128
|
-
__enable_backgrounding(method)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def __enable_backgrounding(method)
|
133
|
-
singleton_method = Util.singleton_methods_include?(self, method)
|
134
|
-
singleton = (class << self; self; end)
|
135
|
-
|
136
|
-
if singleton_method
|
137
|
-
|
138
|
-
TorqueBox::Logger.new( self ).
|
139
|
-
warn("always_background called for :#{method}, but :#{method} " +
|
140
|
-
"exists as both a class and instance method. Only the " +
|
141
|
-
"class method will be backgrounded.") if Util.instance_methods_include?(self, method)
|
142
|
-
|
143
|
-
privatize = Util.private_singleton_methods_include?(self, method)
|
144
|
-
protect = Util.protected_singleton_methods_include?(self, method) unless privatize
|
145
|
-
else
|
146
|
-
privatize = Util.private_instance_methods_include?(self, method)
|
147
|
-
protect = Util.protected_instance_methods_include?(self, method) unless privatize
|
148
|
-
end
|
149
|
-
|
150
|
-
async_method = "__async_#{method}"
|
151
|
-
sync_method = "__sync_#{method}"
|
152
|
-
|
153
|
-
@__backgroundable_methods[method][:backgrounding] = true
|
154
|
-
options = @__backgroundable_methods[method][:options]
|
155
|
-
|
156
|
-
(singleton_method ? singleton : self).class_eval do
|
157
|
-
define_method async_method do |*args|
|
158
|
-
Util.publish_message(self, sync_method, args, options)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
code = singleton_method ? "class << self" : ""
|
163
|
-
code << %Q{
|
164
|
-
alias_method :#{sync_method}, :#{method}
|
165
|
-
alias_method :#{method}, :#{async_method}
|
166
|
-
}
|
167
|
-
code << %Q{
|
168
|
-
#{privatize ? "private" : "protected"} :#{method}, :#{sync_method}, :#{async_method}
|
169
|
-
} if privatize || protect
|
170
|
-
code << "end" if singleton_method
|
171
|
-
|
172
|
-
class_eval code
|
173
|
-
ensure
|
174
|
-
@__backgroundable_methods[method][:backgrounding] = nil
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
# @api private
|
180
|
-
class BackgroundProxy
|
181
|
-
def initialize(receiver, options)
|
182
|
-
@receiver = receiver
|
183
|
-
@options = options
|
184
|
-
end
|
185
|
-
|
186
|
-
def method_missing(method, *args, &block)
|
187
|
-
@receiver.method_missing(method, *args, &block) unless @receiver.respond_to?(method)
|
188
|
-
raise ArgumentError.new("Backgrounding a method with a block argument is not supported. If you need this feature, please file a feature request at http://issues.jboss.org/browse/TORQUE") if block_given?
|
189
|
-
Util.publish_message(@receiver, method, args, @options)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
# @api private
|
194
|
-
module Util
|
195
|
-
|
196
|
-
class << self
|
197
|
-
def publish_message(receiver, method, args, options = { })
|
198
|
-
queue_name = Task.queue_name( "torquebox_backgroundable" )
|
199
|
-
queue = Queue.new( queue_name )
|
200
|
-
future = Future.new( queue )
|
201
|
-
options[:encoding] = :marshal
|
202
|
-
queue.publish( {:receiver => receiver,
|
203
|
-
:future_id => future.correlation_id,
|
204
|
-
:future_queue => queue_name,
|
205
|
-
:future_ttl => options[:future_ttl],
|
206
|
-
:method => method,
|
207
|
-
:args => args}, options )
|
208
|
-
|
209
|
-
future
|
210
|
-
rescue javax.jms.InvalidDestinationException => ex
|
211
|
-
raise RuntimeError.new("The Backgroundable queue is not available. Did you disable it by setting its concurrency to 0?")
|
212
|
-
end
|
213
|
-
|
214
|
-
def singleton_methods_include?(klass, method)
|
215
|
-
methods_include?(klass.singleton_methods, method) ||
|
216
|
-
private_singleton_methods_include?(klass, method)
|
217
|
-
end
|
218
|
-
|
219
|
-
def private_singleton_methods_include?(klass, method)
|
220
|
-
methods_include?(klass.private_methods, method)
|
221
|
-
end
|
222
|
-
|
223
|
-
def protected_singleton_methods_include?(klass, method)
|
224
|
-
methods_include?(klass.protected_methods, method)
|
225
|
-
end
|
226
|
-
|
227
|
-
def instance_methods_include?(klass, method)
|
228
|
-
methods_include?(klass.instance_methods, method) ||
|
229
|
-
private_instance_methods_include?(klass, method)
|
230
|
-
end
|
231
|
-
|
232
|
-
def private_instance_methods_include?(klass, method)
|
233
|
-
methods_include?(klass.private_instance_methods, method)
|
234
|
-
end
|
235
|
-
|
236
|
-
def protected_instance_methods_include?(klass, method)
|
237
|
-
methods_include?(klass.protected_instance_methods, method)
|
238
|
-
end
|
239
|
-
|
240
|
-
def methods_include?(methods, method)
|
241
|
-
method = (RUBY_VERSION =~ /^1\.8\./ ? method.to_s : method.to_sym)
|
242
|
-
methods.include?(method)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# Copyright 2008-2013 Red Hat, Inc, and individual contributors.
|
2
|
-
#
|
3
|
-
# This is free software; you can redistribute it and/or modify it
|
4
|
-
# under the terms of the GNU Lesser General Public License as
|
5
|
-
# published by the Free Software Foundation; either version 2.1 of
|
6
|
-
# the License, or (at your option) any later version.
|
7
|
-
#
|
8
|
-
# This software is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
-
# Lesser General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU Lesser General Public
|
14
|
-
# License along with this software; if not, write to the Free
|
15
|
-
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
|
-
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
|
-
|
18
|
-
require 'torquebox/messaging/message_processor'
|
19
|
-
require 'torquebox/messaging/const_missing'
|
20
|
-
require 'torquebox/messaging/future_responder'
|
21
|
-
|
22
|
-
module TorqueBox
|
23
|
-
module Messaging
|
24
|
-
# @api private
|
25
|
-
class BackgroundableProcessor < MessageProcessor
|
26
|
-
|
27
|
-
def self.log_newrelic_notice(klass)
|
28
|
-
@newrelic_notice_logged ||=
|
29
|
-
log.warn( "The New Relic agent is loaded, but an issue with the inheritance hierachy of " <<
|
30
|
-
klass.name << " prevents us from reporting on its Backgroundable calls." ) || true
|
31
|
-
end
|
32
|
-
|
33
|
-
def on_message(hash)
|
34
|
-
FutureResponder.new( Queue.new( hash[:future_queue] ), hash[:future_id], hash[:future_ttl] ).respond do
|
35
|
-
klass = hash[:receiver].class
|
36
|
-
if klass.respond_to?( :__enable_backgroundable_newrelic_tracing )
|
37
|
-
klass.__enable_backgroundable_newrelic_tracing( hash[:method] )
|
38
|
-
elsif Backgroundable.newrelic_available?
|
39
|
-
self.class.log_newrelic_notice( klass )
|
40
|
-
end
|
41
|
-
|
42
|
-
hash[:receiver].send(hash[:method], *hash[:args])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
def self.log
|
48
|
-
@logger ||= TorqueBox::Logger.new( self )
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# Copyright 2008-2013 Red Hat, Inc, and individual contributors.
|
2
|
-
#
|
3
|
-
# This is free software; you can redistribute it and/or modify it
|
4
|
-
# under the terms of the GNU Lesser General Public License as
|
5
|
-
# published by the Free Software Foundation; either version 2.1 of
|
6
|
-
# the License, or (at your option) any later version.
|
7
|
-
#
|
8
|
-
# This software is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
-
# Lesser General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU Lesser General Public
|
14
|
-
# License along with this software; if not, write to the Free
|
15
|
-
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
|
-
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
|
-
|
18
|
-
require 'torquebox/injectors'
|
19
|
-
require 'torquebox/messaging/session'
|
20
|
-
|
21
|
-
module TorqueBox
|
22
|
-
module Messaging
|
23
|
-
class Connection
|
24
|
-
|
25
|
-
attr_accessor :jms_connection
|
26
|
-
|
27
|
-
def initialize(jms_connection, connection_factory)
|
28
|
-
@jms_connection = jms_connection
|
29
|
-
@connection_factory = connection_factory
|
30
|
-
@tm = TorqueBox.fetch('transaction-manager')
|
31
|
-
end
|
32
|
-
|
33
|
-
def start
|
34
|
-
jms_connection.start
|
35
|
-
end
|
36
|
-
|
37
|
-
def close
|
38
|
-
jms_connection.close
|
39
|
-
end
|
40
|
-
|
41
|
-
def client_id
|
42
|
-
jms_connection.client_id
|
43
|
-
end
|
44
|
-
|
45
|
-
def client_id=(client_id)
|
46
|
-
jms_connection.client_id = client_id
|
47
|
-
end
|
48
|
-
|
49
|
-
def with_session(&block)
|
50
|
-
begin
|
51
|
-
session = create_session
|
52
|
-
result = block.call( session )
|
53
|
-
ensure
|
54
|
-
session.close
|
55
|
-
end
|
56
|
-
result
|
57
|
-
end
|
58
|
-
|
59
|
-
def create_session
|
60
|
-
Session.new( jms_connection.create_session( false, Session::AUTO_ACK ) )
|
61
|
-
end
|
62
|
-
|
63
|
-
def transaction
|
64
|
-
@tm && @tm.transaction
|
65
|
-
end
|
66
|
-
|
67
|
-
def deactivate
|
68
|
-
@connection_factory.deactivate
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
# Copyright 2008-2013 Red Hat, Inc, and individual contributors.
|
2
|
-
#
|
3
|
-
# This is free software; you can redistribute it and/or modify it
|
4
|
-
# under the terms of the GNU Lesser General Public License as
|
5
|
-
# published by the Free Software Foundation; either version 2.1 of
|
6
|
-
# the License, or (at your option) any later version.
|
7
|
-
#
|
8
|
-
# This software is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
-
# Lesser General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU Lesser General Public
|
14
|
-
# License along with this software; if not, write to the Free
|
15
|
-
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
|
-
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
|
-
|
18
|
-
require 'java'
|
19
|
-
require 'torquebox/messaging/connection'
|
20
|
-
|
21
|
-
module TorqueBox
|
22
|
-
module Messaging
|
23
|
-
class ConnectionFactory
|
24
|
-
|
25
|
-
attr_reader :internal_connection_factory
|
26
|
-
|
27
|
-
def self.new(internal_connection_factory = nil)
|
28
|
-
return internal_connection_factory if internal_connection_factory.is_a?( ConnectionFactory )
|
29
|
-
super
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize(internal_connection_factory = nil)
|
33
|
-
@internal_connection_factory = internal_connection_factory
|
34
|
-
@tm = TorqueBox.fetch('transaction-manager')
|
35
|
-
end
|
36
|
-
|
37
|
-
def with_new_connection(options, enlist_tx = true, &block)
|
38
|
-
client_id = options[:client_id]
|
39
|
-
create_internal_connection_factory( options )
|
40
|
-
if !enlist_tx || (current.nil? && !transaction)
|
41
|
-
connection = create_connection( options )
|
42
|
-
connection.client_id = client_id if client_id
|
43
|
-
begin
|
44
|
-
connection.start
|
45
|
-
result = block.call( connection )
|
46
|
-
ensure
|
47
|
-
connection.close
|
48
|
-
end
|
49
|
-
elsif transaction && (!current.respond_to?(:session_transaction) || current.session_transaction != transaction)
|
50
|
-
result = block.call( activate( create_xa_connection( options ), client_id ) )
|
51
|
-
# XaSession's afterCompletion callback deactivates XA connections
|
52
|
-
else
|
53
|
-
result = block.call( current )
|
54
|
-
end
|
55
|
-
result
|
56
|
-
end
|
57
|
-
|
58
|
-
def connections
|
59
|
-
Thread.current[:torquebox_connection] ||= []
|
60
|
-
end
|
61
|
-
|
62
|
-
def current
|
63
|
-
connections.last
|
64
|
-
end
|
65
|
-
|
66
|
-
def activate(connection, client_id)
|
67
|
-
connection.client_id = client_id if client_id
|
68
|
-
connection.start
|
69
|
-
connections.push(connection) && current
|
70
|
-
end
|
71
|
-
|
72
|
-
def deactivate
|
73
|
-
connections.pop.close
|
74
|
-
end
|
75
|
-
|
76
|
-
def transaction
|
77
|
-
@tm && @tm.transaction
|
78
|
-
end
|
79
|
-
|
80
|
-
def create_internal_connection_factory(options)
|
81
|
-
host = options[:host] || "localhost"
|
82
|
-
port = options[:port] || 5445
|
83
|
-
if !@internal_connection_factory
|
84
|
-
@internal_connection_factory = create_connection_factory( host, port )
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def create_connection(options={})
|
89
|
-
username = options[:username]
|
90
|
-
password = options[:password]
|
91
|
-
Connection.new( @internal_connection_factory.create_connection( username, password ), self )
|
92
|
-
end
|
93
|
-
|
94
|
-
def create_xa_connection(options={})
|
95
|
-
username = options[:username]
|
96
|
-
password = options[:password]
|
97
|
-
XaConnection.new( @internal_connection_factory.create_xa_connection( username, password ), self )
|
98
|
-
end
|
99
|
-
|
100
|
-
def create_connection_factory(host, port)
|
101
|
-
connect_opts = { "host" => host, "port" => port }
|
102
|
-
transport_config =
|
103
|
-
org.hornetq.api.core.TransportConfiguration.new("org.hornetq.core.remoting.impl.netty.NettyConnectorFactory",
|
104
|
-
connect_opts)
|
105
|
-
org.hornetq.api.jms.HornetQJMSClient.createConnectionFactoryWithoutHA( org.hornetq.api.jms::JMSFactoryType::CF, transport_config )
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
def to_s
|
110
|
-
"[ConnectionFactory: internal_connection_factory=#{internal_connection_factory}]"
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|