jruby-hornetq 0.2.0.alpha → 0.2.1.alpha

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 (46) hide show
  1. data/HISTORY.md +8 -0
  2. data/README.md +88 -5
  3. data/Rakefile +4 -4
  4. data/bin/hornetq_server +26 -55
  5. data/examples/{batch_client.rb → client/advanced/batch_client.rb} +11 -4
  6. data/examples/{client.rb → client/advanced/client.rb} +8 -10
  7. data/examples/{consumer.rb → client/advanced/consumer.rb} +2 -2
  8. data/examples/{hornetq.yml → client/advanced/hornetq.yml} +11 -10
  9. data/examples/{multi_client.rb → client/advanced/multi_client.rb} +6 -3
  10. data/examples/{multi_consumer.rb → client/advanced/multi_consumer.rb} +2 -2
  11. data/examples/{producer.rb → client/advanced/producer.rb} +3 -4
  12. data/examples/{server.rb → client/advanced/server.rb} +6 -9
  13. data/examples/client/client.rb +31 -0
  14. data/examples/client/consumer.rb +22 -0
  15. data/examples/client/invm.rb +38 -0
  16. data/examples/client/producer.rb +21 -0
  17. data/examples/client/server.rb +31 -0
  18. data/examples/server/backup_server.yml +6 -0
  19. data/examples/server/live_server.yml +1 -0
  20. data/examples/server/standalone_server.yml +1 -0
  21. data/lib/data/bindings/hornetq-bindings-1.bindings +0 -0
  22. data/lib/data/bindings/hornetq-bindings-2.bindings +0 -0
  23. data/lib/hornetq.rb +30 -9
  24. data/lib/hornetq/client.rb +19 -0
  25. data/lib/hornetq/{hornet_q_client.rb → client/factory.rb} +85 -88
  26. data/lib/hornetq/{org_hornetq_api_core_client_client_session.rb → client/org_hornetq_api_core_client_client_session.rb} +2 -2
  27. data/lib/hornetq/{org_hornetq_core_client_impl_client_message_impl.rb → client/org_hornetq_core_client_impl_client_message_impl.rb} +62 -2
  28. data/lib/hornetq/{org_hornetq_core_client_impl_client_producer_impl.rb → client/org_hornetq_core_client_impl_client_producer_impl.rb} +0 -0
  29. data/lib/hornetq/{org_hornetq_utils_typed_properties.rb → client/org_hornetq_utils_typed_properties.rb} +0 -0
  30. data/lib/hornetq/{client_requestor.rb → client/requestor.rb} +2 -2
  31. data/lib/hornetq/{client_server.rb → client/server.rb} +2 -2
  32. data/lib/hornetq/{session_pool.rb → client/session_pool.rb} +20 -20
  33. data/lib/hornetq/{lib → java}/hornetq-core-client.jar +0 -0
  34. data/lib/hornetq/{lib → java}/hornetq-core.jar +0 -0
  35. data/lib/hornetq/{lib → java}/netty.jar +0 -0
  36. data/lib/hornetq/org_hornetq_core_server_hornet_q_server.rb +13 -0
  37. data/lib/hornetq/server.rb +12 -0
  38. data/lib/hornetq/server/factory.rb +86 -0
  39. data/lib/hornetq/uri.rb +59 -0
  40. data/test/server_factory_test.rb +184 -0
  41. data/test/uri_test.rb +74 -0
  42. metadata +44 -28
  43. data/examples/backup_server.yml +0 -4
  44. data/examples/live_server.yml +0 -5
  45. data/examples/run_broker.rb +0 -59
  46. data/examples/standalone_server.yml +0 -3
@@ -4,7 +4,7 @@
4
4
  #
5
5
 
6
6
  # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
7
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../../lib'
8
8
 
9
9
  require 'rubygems'
10
10
  require 'yaml'
@@ -15,22 +15,19 @@ timeout = (ARGV[0] || 60000).to_i
15
15
  config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
16
16
 
17
17
  # Create a HornetQ session
18
- HornetQClient::Factory.create_session(config) do |session|
18
+ HornetQ::Client::Factory.create_session(config) do |session|
19
19
  server = session.create_server('jms.queue.ExampleQueue', timeout)
20
20
  session.start
21
21
 
22
22
  count = 0
23
23
  start_time = Time.now
24
+ puts "Server started and waiting for requests ..."
24
25
  server.run do |request_message|
25
- count = count + 1
26
- #puts "=================================="
27
- text = request_message.body
28
- #p text
29
- #p request_message
30
- #print "."
26
+ count += 1
27
+ print '.'
31
28
  puts "#{count}" if count%1000 == 0
32
29
  puts "Durable" if request_message.durable
33
- reply_message = session.create_message(HornetQClient::Message::TEXT_TYPE, false)
30
+ reply_message = session.create_message(HornetQ::Client::Message::TEXT_TYPE, false)
34
31
  reply_message << "Test Response"
35
32
  reply_message
36
33
  end
@@ -0,0 +1,31 @@
1
+ #
2
+ # HornetQ Requestor:
3
+ # Submit a request and wait for a reply
4
+ #
5
+
6
+ # Allow examples to be run in-place without requiring a gem install
7
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
+
9
+ require 'rubygems'
10
+ require 'hornetq'
11
+
12
+ timeout = (ARGV[0] || 5000).to_i
13
+
14
+ HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
15
+ requestor = session.create_requestor('jms.queue.ExampleQueue')
16
+
17
+ # Create non-durable message
18
+ message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
19
+ message.body = "Request Current Time"
20
+
21
+ # Send message to the queue
22
+ puts "Send request message and wait for Reply"
23
+ if reply = requestor.request(message, timeout)
24
+ puts "Received Response: #{reply.inspect}"
25
+ puts " Message: #{reply.body.inspect}"
26
+ else
27
+ puts "Time out, No reply received after #{timeout/1000} seconds"
28
+ end
29
+
30
+ requestor.close
31
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+ # HornetQ Consumer:
3
+ # Write a single message to the queue
4
+ #
5
+
6
+ # Allow examples to be run in-place without requiring a gem install
7
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
+
9
+ require 'rubygems'
10
+ require 'hornetq'
11
+
12
+ HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
13
+ consumer = session.create_consumer('jms.queue.ExampleQueue')
14
+
15
+ # Receive a single message, return immediately if no message available
16
+ if message = consumer.receive_immediate
17
+ puts "Received:[#{message.body}]"
18
+ message.acknowledge
19
+ else
20
+ puts "No message found"
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ #
2
+ # HornetQ In VM Producer and consumer:
3
+ # Example of how to produce and consume messages with the same Java VM
4
+ #
5
+
6
+ # Allow examples to be run in-place without requiring a gem install
7
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
+
9
+ require 'rubygems'
10
+ require 'hornetq'
11
+
12
+ # Create and start an InVM HornetQ server instance
13
+ HornetQ::Server::Factory.start('hornetq://invm') do |server|
14
+ # Allow a CTRL-C to stop this process
15
+ server.enable_shutdown_on_signal
16
+
17
+ HornetQ::Client::Factory.start('hornetq://invm') do |session|
18
+ session.create_queue("MyAddress","MyQueue", nil, false)
19
+
20
+ producer = session.create_producer('MyAddress')
21
+ consumer = session.create_consumer('MyQueue')
22
+
23
+ # Create a non-durable message to send
24
+ message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
25
+ message << "#{Time.now}: ### Hello, World ###"
26
+
27
+ producer.send(message)
28
+
29
+
30
+ # Receive a single message, return immediately if no message available
31
+ if message = consumer.receive_immediate
32
+ puts "Received:[#{message.body}]"
33
+ message.acknowledge
34
+ else
35
+ puts "No message found"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,21 @@
1
+ #
2
+ # HornetQ Producer:
3
+ # Write messages to the queue
4
+ #
5
+
6
+ # Allow examples to be run in-place without requiring a gem install
7
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
+
9
+ require 'rubygems'
10
+ require 'hornetq'
11
+
12
+ HornetQ::Client::Factory.create_session(:connector=> {:uri => 'hornetq://localhost'}) do |session|
13
+ # Create Producer so that we can send messages to the Address 'jms.queue.ExampleQueue'
14
+ producer = session.create_producer('jms.queue.ExampleQueue')
15
+
16
+ # Create a non-durable message to send
17
+ message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
18
+ message << "#{Time.now}: ### Hello, World ###"
19
+
20
+ producer.send(message)
21
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # HornetQ Consumer:
3
+ # Reply to a request
4
+ #
5
+
6
+ # Allow examples to be run in-place without requiring a gem install
7
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
+
9
+ require 'rubygems'
10
+ require 'hornetq'
11
+
12
+ timeout = (ARGV[0] || 60000).to_i
13
+
14
+ HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
15
+ server = session.create_server('jms.queue.ExampleQueue', timeout)
16
+
17
+ puts "Waiting for Requests..."
18
+ server.run do |request_message|
19
+ puts "Received:[#{request_message.body}]"
20
+
21
+ # Create Reply Message
22
+ reply_message = session.create_message(HornetQ::Client::Message::TEXT_TYPE, false)
23
+ reply_message.body = "Echo [#{request_message.body}]"
24
+
25
+ # The result of the block is the message to be sent back
26
+ reply_message
27
+ end
28
+
29
+ # Server will stop after timeout period after no messages received. Set to 0 to wait foreve
30
+ server.close
31
+ end
@@ -0,0 +1,6 @@
1
+ backup: true
2
+ data_directory: ../data_backup
3
+ host: 0.0.0.0
4
+ port: 5446
5
+
6
+ uri: hornetq://0.0.0.0:5446/?backup=true&data_directory=./data_backup
@@ -0,0 +1 @@
1
+ uri: hornetq://0.0.0.0:5445,localhost:5446/?data_directory=./data
@@ -0,0 +1 @@
1
+ uri: hornetq://0.0.0.0/?data_directory=./data
@@ -1,9 +1,30 @@
1
- require File.dirname(__FILE__) + '/hornetq/lib/hornetq-core-client.jar'
2
- require File.dirname(__FILE__) + '/hornetq/lib/netty.jar'
3
- require 'hornetq/org_hornetq_api_core_client_client_session'
4
- require 'hornetq/org_hornetq_core_client_impl_client_message_impl'
5
- require 'hornetq/org_hornetq_utils_typed_properties'
6
- require 'hornetq/hornet_q_client'
7
- require 'hornetq/client_requestor'
8
- require 'hornetq/client_server'
9
- require 'hornetq/session_pool'
1
+ include Java
2
+ require 'hornetq/server'
3
+ require 'hornetq/client'
4
+ require 'hornetq/uri'
5
+
6
+ module HornetQ
7
+
8
+ # Netty Class name
9
+ NETTY_CONNECTOR_CLASS_NAME = 'org.hornetq.core.remoting.impl.netty.NettyConnectorFactory'
10
+ NETTY_ACCEPTOR_CLASS_NAME = 'org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory'
11
+ INVM_CONNECTOR_CLASS_NAME = 'org.hornetq.core.remoting.impl.invm.InVMConnectorFactory'
12
+ INVM_ACCEPTOR_CLASS_NAME = 'org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory'
13
+
14
+ DEFAULT_NETTY_PORT = java.lang.Integer.new(5445)
15
+ DEFAULT_DATA_DIRECTORY = './data'
16
+
17
+ # Allow override of our included jars so we don't have to keep up with hornetq releases
18
+ def self.require_jar(jar_name)
19
+ if ENV['HORNETQ_HOME']
20
+ require "#{ENV['HORNETQ_HOME']}/lib/#{jar_name}.jar"
21
+ else
22
+ require "hornetq/java/#{jar_name}.jar"
23
+ end
24
+ end
25
+
26
+ def self.netty_port(port)
27
+ port ||= DEFAULT_NETTY_PORT
28
+ return java.lang.Integer.new(port)
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ module HornetQ
2
+ module Client
3
+ # Only load as needed
4
+ def self.load_requirements
5
+ HornetQ.require_jar 'hornetq-core-client'
6
+ HornetQ.require_jar 'netty'
7
+ require 'hornetq/client/org_hornetq_api_core_client_client_session'
8
+ require 'hornetq/client/org_hornetq_core_client_impl_client_message_impl'
9
+ require 'hornetq/client/org_hornetq_utils_typed_properties'
10
+
11
+ # Import Message Constants
12
+ import Java::org.hornetq.api.core::Message
13
+ end
14
+ end
15
+ end
16
+
17
+ require 'hornetq/client/factory'
18
+ require 'hornetq/client/requestor'
19
+ require 'hornetq/client/server'
@@ -1,14 +1,6 @@
1
1
  require 'uri'
2
2
 
3
- module HornetQClient
4
-
5
- # Import Message Constants
6
- import Java::org.hornetq.api.core.Message
7
-
8
- # Netty Class name
9
- NETTY_CLASS_NAME ='org.hornetq.core.remoting.impl.netty.NettyConnectorFactory'
10
- INVM_CLASS_NAME = 'org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory'
11
- DEFAULT_NETTY_PORT = 5445
3
+ module HornetQ::Client
12
4
 
13
5
  class Factory
14
6
  # Create a new Factory from which sessions can be created
@@ -16,7 +8,7 @@ module HornetQClient
16
8
  # Parameters:
17
9
  # * a Hash consisting of one or more of the named parameters
18
10
  # * Summary of parameters and their default values
19
- # HornetQClient::Factory.new(
11
+ # HornetQ::Client::Factory.new(
20
12
  # :uri => 'hornetq://localhost',
21
13
  # :ack_batch_size => ,
22
14
  # :auto_group => ,
@@ -106,75 +98,59 @@ module HornetQClient
106
98
  # * :thread_pool_max_size
107
99
  # * :use_global_pools
108
100
 
109
- def initialize(parms={})
110
- raise "Missing :uri under :connector in config" unless uri = parms[:uri]
101
+ def initialize(params={})
102
+ HornetQ::Client.load_requirements
103
+ uri = nil
111
104
  # TODO: Support :uri as an array for cluster configurations
112
-
113
- scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI.split(uri)
114
- raise InvalidURIError,"bad URI(only scheme hornetq:// is supported): #{uri}" unless scheme == 'hornetq'
115
- backup_host = backup_port = nil
116
-
117
- # Check for multiple server names
118
- if registry
119
- host, backup_host = registry.split(',')
120
- host, port = host.split(':')
121
- backup_host, backup_port = backup_host.split(':')
122
- end
123
-
124
- # Extract settings passed in query
125
- settings = {}
126
- if query
127
- query.split(';').each do |i|
128
- key, value = i.split('=')
129
- settings[key] = value
130
- end
105
+ if params.kind_of?(String)
106
+ uri = HornetQ::URI.new(params)
107
+ params = uri.params
108
+ else
109
+ raise "Missing :uri param in HornetQ::Server.create_server" unless params[:uri]
110
+ uri = HornetQ::URI.new(params.delete(:uri))
111
+ # params override uri params
112
+ params = uri.params.merge(params)
131
113
  end
132
-
133
- # Determine transport protocol
134
- factory = nil
114
+
115
+ @factory = nil
135
116
  # In-VM Transport has no fail-over or additional parameters
136
- if host == 'invm'
137
- transport = Java::org.hornetq.api.core.TransportConfiguration.new(INVM_CLASS_NAME)
138
- factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport)
139
- elsif settings[:protocol]
117
+ if uri.host == 'invm'
118
+ transport = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::INVM_CONNECTOR_CLASS_NAME)
119
+ @factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport)
120
+ elsif params[:protocol]
140
121
  # Auto-Discovery just has a host name and port
141
- if settings[:protocol] == 'discovery'
142
- factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(host, port)
143
- elsif settings[:protocol] != 'netty'
144
- raise "Unknown HornetQ protocol:#{settings[:protocol]}"
122
+ if params[:protocol] == 'discovery'
123
+ @factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(uri.host, uri.port)
124
+ elsif params[:protocol] != 'netty'
125
+ raise "Unknown HornetQ protocol:#{params[:protocol]}"
145
126
  end
146
127
  end
147
128
 
148
129
  # Unless already created, then the factory will use the netty protocol
149
- unless factory
130
+ unless @factory
150
131
  # Primary Transport
151
- raise "Mandatory hostname missing in :uri" unless host
152
- port ||= DEFAULT_NETTY_PORT
153
- transport = Java::org.hornetq.api.core.TransportConfiguration.new(NETTY_CLASS_NAME, {'host' => host, 'port' => Java::java.lang.Integer.new(port)})
132
+ transport = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::NETTY_CONNECTOR_CLASS_NAME, {'host' => uri.host, 'port' => uri.port })
154
133
 
155
134
  # Check for backup server connection information
156
- if backup_host
157
- backup_port ||= DEFAULT_NETTY_PORT
158
- backup_transport = Java::org.hornetq.api.core.TransportConfiguration.new(NETTY_CLASS_NAME, {'host' => backup_host, 'port' => Java::java.lang.Integer.new(backup_port)})
159
- factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport, backup_transport)
135
+ if uri.backup_host
136
+ backup_transport = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::NETTY_CONNECTOR_CLASS_NAME, {'host' => uri.backup_host, 'port' => uri.backup_port })
137
+ @factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport, backup_transport)
160
138
  else
161
- factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport)
139
+ @factory = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport)
162
140
  end
163
141
  end
164
142
 
165
143
  # If any other options were supplied, apply them to the created Factory instance
166
- parms.each_pair do |key, val|
144
+ params.each_pair do |key, val|
167
145
  next if key == :uri
168
146
  method = key.to_s+'='
169
- if factory.respond_to? method
170
- factory.send method, val
171
- #puts "Debug: #{key} = #{factory.send key}" if factory.respond_to? key.to_sym
147
+ if @factory.respond_to? method
148
+ @factory.send method, val
149
+ #puts "Debug: #{key} = #{@factory.send key}" if @factory.respond_to? key.to_sym
172
150
  else
173
151
  puts "Warning: Option:#{key}, with value:#{val} is invalid and being ignored"
174
152
  end
175
153
  end
176
-
177
- @factory = factory
178
154
  end
179
155
 
180
156
  # Create a new HornetQ session
@@ -188,14 +164,14 @@ module HornetQClient
188
164
  #
189
165
  # Note:
190
166
  # * The returned session MUST be closed once complete
191
- # factory = HornetQClient::Factory.new(:uri => 'hornetq://localhost/')
167
+ # factory = HornetQ::Client::Factory.new(:uri => 'hornetq://localhost/')
192
168
  # session = factory.create_session
193
169
  # ...
194
170
  # session.close
195
171
  # factory.close
196
- # * It is recommended to rather call HornetQClient::Factory.create_session
172
+ # * It is recommended to rather call HornetQ::Client::Factory.create_session
197
173
  # so that all resouces are closed automatically
198
- # HornetQClient::Factory.create_session(:uri => 'hornetq://localhost/') do |session|
174
+ # HornetQ::Client::Factory.create_session(:uri => 'hornetq://localhost/') do |session|
199
175
  # ...
200
176
  # end
201
177
  #
@@ -212,7 +188,7 @@ module HornetQClient
212
188
  #
213
189
  # factory = nil
214
190
  # begin
215
- # factory = HornetQClient::Factory.new(:uri => 'hornetq://localhost/')
191
+ # factory = HornetQ::Client::Factory.new(:uri => 'hornetq://localhost/')
216
192
  # factory.create_session do |session|
217
193
  #
218
194
  # # Create a new queue
@@ -222,7 +198,7 @@ module HornetQClient
222
198
  # producer = session.create_producer('Example')
223
199
  #
224
200
  # # Create a Text Message
225
- # message = session.create_message(HornetQClient::Message::TEXT_TYPE,true)
201
+ # message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,true)
226
202
  # message << 'Hello World'
227
203
  #
228
204
  # # Send the message
@@ -238,7 +214,7 @@ module HornetQClient
238
214
  # factory = nil
239
215
  # session = nil
240
216
  # begin
241
- # factory = HornetQClient::Factory.new(:uri => 'hornetq://localhost/')
217
+ # factory = HornetQ::Client::Factory.new(:uri => 'hornetq://localhost/')
242
218
  # session = factory.create_session
243
219
  #
244
220
  # # Create a new queue
@@ -248,7 +224,7 @@ module HornetQClient
248
224
  # producer = session.create_producer('Example')
249
225
  #
250
226
  # # Create a Text Message
251
- # message = session.create_message(HornetQClient::Message::TEXT_TYPE,true)
227
+ # message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,true)
252
228
  # message.body_buffer.write_string('Hello World')
253
229
  #
254
230
  # # Send the message
@@ -304,21 +280,20 @@ module HornetQClient
304
280
  # * :ack_batch_size
305
281
  # * the batch size of the acknowledgements
306
282
  #
307
- def create_session(parms={}, &proc)
308
- raise "HornetQClient Factory Already Closed" unless @factory
283
+ def create_session(params={}, &proc)
284
+ raise "HornetQ::Client::Factory Already Closed" unless @factory
309
285
  if proc
310
286
  session = nil
311
287
  result = nil
312
288
  begin
313
- #session = @factory.create_session(true, true)
314
289
  session = @factory.create_session(
315
- parms[:username],
316
- parms[:password],
317
- parms[:xa] || false,
318
- parms[:auto_commit_sends].nil? ? true : parms[:auto_commit_sends],
319
- parms[:auto_commit_acks].nil? ? true : parms[:auto_commit_acks],
320
- parms[:pre_acknowledge] || false,
321
- parms[:ack_batch_size] || 1)
290
+ params[:username],
291
+ params[:password],
292
+ params[:xa] || false,
293
+ params[:auto_commit_sends].nil? ? true : params[:auto_commit_sends],
294
+ params[:auto_commit_acks].nil? ? true : params[:auto_commit_acks],
295
+ params[:pre_acknowledge] || false,
296
+ params[:ack_batch_size] || 1)
322
297
  result = proc.call(session)
323
298
  ensure
324
299
  session.close if session
@@ -326,19 +301,21 @@ module HornetQClient
326
301
  result
327
302
  else
328
303
  @factory.create_session(
329
- parms[:username],
330
- parms[:password],
331
- parms[:xa] || false,
332
- parms[:auto_commit_sends].nil? ? true : parms[:auto_commit_sends],
333
- parms[:auto_commit_acks].nil? ? true : parms[:auto_commit_acks],
334
- parms[:pre_acknowledge] || false,
335
- parms[:ack_batch_size] || 1)
304
+ params[:username],
305
+ params[:password],
306
+ params[:xa] || false,
307
+ params[:auto_commit_sends].nil? ? true : params[:auto_commit_sends],
308
+ params[:auto_commit_acks].nil? ? true : params[:auto_commit_acks],
309
+ params[:pre_acknowledge] || false,
310
+ params[:ack_batch_size] || 1)
336
311
  end
337
312
  end
338
313
 
339
314
  # Create a Session pool
340
- def create_session_pool(parms={})
341
- SessionPool.new(self, parms)
315
+ # TODO Raise an exception when gene_pool is not available
316
+ def create_session_pool(params={})
317
+ require 'hornetq/client/session_pool'
318
+ SessionPool.new(self, params)
342
319
  end
343
320
 
344
321
  # Close Factory connections
@@ -353,29 +330,49 @@ module HornetQClient
353
330
  # block. Upon completion the session and factory are both closed
354
331
  # See Factory::initialize and Factory::create_session for the list
355
332
  # of parameters
356
- def self.create_session(parms={},&proc)
333
+ def self.create_session(params={},&proc)
357
334
  raise "Missing mandatory code block" unless proc
358
335
  factory = nil
359
336
  session = nil
360
337
  begin
361
- factory = self.new(parms[:connector] || {})
362
- session = factory.create_session(parms[:session] || {}, &proc)
338
+ if params.kind_of?(String)
339
+ # TODO: Support passing username and password from URI to Session
340
+ factory = self.new(params)
341
+ session = factory.create_session({}, &proc)
342
+ else
343
+ factory = self.new(params[:connector] || {})
344
+ session = factory.create_session(params[:session] || {}, &proc)
345
+ end
363
346
  ensure
347
+ session.close if session
364
348
  factory.close if factory
365
349
  end
366
350
  end
367
351
 
352
+ # Create a new Factory along with a Session, and then start the session
353
+ #
354
+ # Creates a new factory and session, then passes the session to the supplied
355
+ # block. Upon completion the session and factory are both closed
356
+ # See Factory::initialize and Factory::create_session for the list
357
+ # of parameters
358
+ def self.start(params={},&proc)
359
+ create_session(params) do |session|
360
+ session.start
361
+ proc.call(session)
362
+ end
363
+ end
364
+
368
365
  # Call the supplied code block after creating a factory instance
369
366
  # See initialize for the parameter list
370
367
  # The factory is closed before returning
371
368
  #
372
369
  # Returns the result of the code block
373
- def self.create_factory(parms={}, &proc)
370
+ def self.create_factory(params={}, &proc)
374
371
  raise "Missing mandatory code block" unless proc
375
372
  factory = nil
376
373
  result = nil
377
374
  begin
378
- factory=self.new(parms)
375
+ factory=self.new(params)
379
376
  result = proc.call(factory)
380
377
  ensure
381
378
  factory.close