jruby-hornetq 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -116,7 +116,7 @@ Producer: Write messages to a queue:
116
116
  require 'rubygems'
117
117
  require 'hornetq'
118
118
 
119
- HornetQ::Client::Factory.create_session(:connector=> {:uri => 'hornetq://localhost'}) do |session|
119
+ HornetQ::Client::Factory.create_session(:connection => {:uri => 'hornetq://localhost'}) do |session|
120
120
  # Create Producer so that we can send messages to the Address 'jms.queue.ExampleQueue'
121
121
  producer = session.create_producer('jms.queue.ExampleQueue')
122
122
 
@@ -133,7 +133,7 @@ Consumer: Read message from a queue:
133
133
  require 'rubygems'
134
134
  require 'hornetq'
135
135
 
136
- HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
136
+ HornetQ::Client::Factory.start(:connection => {:uri => 'hornetq://localhost'}) do |session|
137
137
  consumer = session.create_consumer('jms.queue.ExampleQueue')
138
138
 
139
139
  # Receive a single message, return immediately if no message available
@@ -156,7 +156,7 @@ Server: Receive requests and send back a reply
156
156
  # Shutdown Server after 5 minutes of inactivity, set to 0 to wait forever
157
157
  timeout = 300000
158
158
 
159
- HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
159
+ HornetQ::Client::Factory.start(:connection => {:uri => 'hornetq://localhost'}) do |session|
160
160
  server = session.create_server('jms.queue.ExampleQueue', timeout)
161
161
 
162
162
  puts "Waiting for Requests..."
@@ -184,7 +184,7 @@ Client: Send a request and wait for a reply
184
184
  # Wait 5 seconds for a reply
185
185
  timeout = 5000
186
186
 
187
- HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
187
+ HornetQ::Client::Factory.start(:connection => {:uri => 'hornetq://localhost'}) do |session|
188
188
  requestor = session.create_requestor('jms.queue.ExampleQueue')
189
189
 
190
190
  # Create non-durable message
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ desc "Build gem"
9
9
  task :gem do |t|
10
10
  gemspec = Gem::Specification.new do |s|
11
11
  s.name = 'jruby-hornetq'
12
- s.version = '0.3.1'
12
+ s.version = '0.3.2'
13
13
  s.authors = ['Reid Morrison', 'Brad Pardee']
14
14
  s.email = ['rubywmq@gmail.com', 'bpardee@gmail.com']
15
15
  s.homepage = 'https://github.com/ClarityServices/jruby-hornetq'
Binary file
Binary file
@@ -10,6 +10,9 @@
10
10
  # This sample sends a total of 100 requests in batches of 10.
11
11
  # One thread sends requests and the other processes replies.
12
12
  # Once 80% of the replies are back, it will send the next batch
13
+ #
14
+ # Before running this sample, start server.rb first
15
+ #
13
16
 
14
17
  # Allow examples to be run in-place without requiring a gem install
15
18
  $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
@@ -17,99 +20,53 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
17
20
  require 'rubygems'
18
21
  require 'yaml'
19
22
  require 'hornetq'
20
- require 'sync'
23
+ require 'batch_requestor_pattern'
21
24
 
22
- total_count = (ARGV[0] || 100).to_i
23
- batching_size = (ARGV[1] || 10).to_i
25
+ batch_size = (ARGV[0] || 100).to_i
26
+ window_size = (ARGV[1] || 10).to_i
24
27
 
25
- request_address = 'ServerAddress'
26
- config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
28
+ server_address = 'ServerAddress'
27
29
 
28
- class BatchClientPattern
29
- def initialize(connection, request_address)
30
- @session = connection.create_session
31
- @producer = @session.create_producer(request_address)
32
- @reply_queue = "#{request_address}.#{Java::java.util::UUID.randomUUID.toString}"
33
- @session.create_temporary_queue(@reply_queue, @reply_queue)
34
- @counter_sync = Sync.new
35
- @counter = 0
36
-
37
- # Start consuming replies
38
- connection.on_message(:queue_name => @reply_queue) {|message| process_reply(message) }
39
- end
40
-
41
- # Increment Message Counter
42
- def inc_counter(total_count=1)
43
- @counter_sync.synchronize(:EX) { @counter += total_count }
44
- end
30
+ config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
45
31
 
46
- # Decrement Message counter
47
- def dec_counter(total_count=1)
48
- @counter_sync.synchronize(:EX) { @counter -= total_count }
49
- end
50
-
51
- # Return the current message count
52
- def counter
53
- @counter_sync.synchronize(:SH) { @counter }
54
- end
32
+ # Create a HornetQ session
33
+ HornetQ::Client::Connection.connection(config[:connection]) do |connection|
34
+ window_size = batch_size if window_size > batch_size
35
+ # * :batch_size Total size of batch
36
+ # * :window_size Size of the sliding window. This also indicates the maximimum
37
+ # number of outstanding requests to have open at any time
38
+ # Default: 0.8
39
+ # (:max_outstanding_responses)
55
40
 
56
- # Send x messages
57
- def send(total_count)
58
- #print "Sending #{total_count} messages"
59
- start_time = Time.now
60
- total_count.times do |i|
61
- message = @session.create_message(HornetQ::Client::Message::TEXT_TYPE,true)
62
- message.reply_to_queue_name = @reply_queue
63
- message.body = "Request Current Time. #{i}"
64
- @producer.send(message)
65
- print "."
66
- #puts "Sent:#{message}"
67
- end
68
- duration = Time.now - start_time
69
- #printf "\nSend %5d msg, %5.2f s, %10.2f msg/s\n", total_count, duration, total_count/duration
70
- end
41
+ pattern_config = {
42
+ :connection => connection,
43
+ :server_address => server_address,
44
+ :completion_ratio => 0.8
45
+ }
71
46
 
72
- # Receive Reply messages
73
- def process_reply(message)
47
+ requestor = BatchRequestorPattern.new(connection, server_address) do |message|
48
+ # Display an @ symbol for every reply received
74
49
  print '@'
75
- inc_counter(1)
76
- message.acknowledge
77
50
  end
78
51
 
79
- def close
80
- @producer.close
81
- @session.close
82
- end
83
- end
84
-
85
- # Create a HornetQ session
86
- HornetQ::Client::Connection.connection(config[:connection]) do |connection|
87
- batching_size = total_count if batching_size > total_count
88
-
89
- client = BatchClientPattern.new(connection, request_address)
90
-
91
- times = (total_count/batching_size).to_i
52
+ times = (batch_size/window_size).to_i
92
53
  puts "Performing #{times} loops"
93
- count = 0
54
+
94
55
  times.times do |i|
95
- client.send(batching_size)
96
- count += batching_size
97
- # Wait for at least 80% of responses
98
- loop do
99
- #puts "Waiting for receive"
100
- sleep 0.1
101
- received_count = client.counter
102
- #puts "\nReceived #{received_count} messages"
103
- if received_count >= 0.8 * count
104
- puts ""
105
- break
106
- end
56
+
57
+ window_size.times do |i|
58
+ message = @session.create_message(true)
59
+ message.type = :text
60
+ message.body = "Request Current Time. #{i}"
61
+ requestor.send(message)
62
+ print "."
107
63
  end
64
+
65
+ # Wait for at least 80% of responses before sending more requests
66
+ requestor.wait_for_outstanding_replies
67
+
108
68
  end
109
-
110
- while client.counter < total_count
111
- sleep 0.1
112
- print "*"
113
- end
114
- client.close
69
+ puts "Done sending requests, waiting for remaining replies"
70
+ requestor.wait_for_all_outstanding_replies
71
+ requestor.close
115
72
  end
@@ -0,0 +1,163 @@
1
+ #
2
+ # HornetQ Batch Requestor Pattern:
3
+ # Submit a batch of requests and wait for replies
4
+ #
5
+ # This is an advanced use case where the client submits requests in a controlled
6
+ # fashion. The alternative would be just to submit all requests at the same time,
7
+ # however then it becomes extremely difficult to pull back submitted requests
8
+ # if say 80% of the first say 100 requests fail.
9
+ #
10
+ # This sample sends a total of 100 requests in batches of 10.
11
+ # One thread sends requests and the other processes replies.
12
+ # Once 80% of the replies are back, it will send the next batch
13
+ #
14
+ # Maybe one day this pattern can make it out of examples and into the product :)
15
+ #
16
+ require 'sync'
17
+
18
+ class BatchRequestorPattern
19
+
20
+ attr_accessor :batch_size, :window_size, :completion_ratio
21
+ attr_reader :reply_address, :reply_count, :send_count
22
+
23
+ #
24
+ # Returns a new BatchRequestorPattern
25
+ #
26
+ # Parameters:
27
+ # * connection: The HornetQ connection. Used for creating sessions for the
28
+ # pattern to run
29
+ # * server_address: The address to send requests to
30
+ # * An optional block can be passed in that will be called with every reply
31
+ # It can be used to perform specialized handling such as:
32
+ # ** Aborting a batch process
33
+ # ** Moving the response to another queue for re-queuing later
34
+ #
35
+ # Implementation:
36
+ #
37
+ # Creates a temporary reply to queue for receiving responses from the server
38
+ # Consists of the server_address following by a '.' and a UUID
39
+ #
40
+ # Uses Connection#on_message to process replies in a separate thread
41
+ #
42
+ # If the connection is started, it will start consuming replies immediately,
43
+ # otherwise it will only start processing replies once the connection has
44
+ # been started.
45
+ #
46
+ # Sending of messages should be done by only one thread at a time since
47
+ # this pattern shares the same session and producer for sending messages
48
+ #
49
+ # Parameters
50
+ # * :connection Connection to create session and response queue with
51
+ # * :server_address Address to send requests to
52
+ # * :completion_ratio Percentage of responses to wait for before sending
53
+ # further requests
54
+ # Must be a number between 0 and 1 inclusive
55
+ # Default: 0.8
56
+ #
57
+ def initialize(params, &reply_block)
58
+ params = params.dup
59
+ connection = params.delete(:connection)
60
+ server_address = params.delete(:server_address)
61
+ @completion_ratio = params.delete(:completion_ratio).to_f
62
+
63
+ raise "Invalid :completion_ratio of #{@completion_ratio}. Must be between 0 and 1 inclusive" unless @completion_ratio.between?(0,1)
64
+
65
+ @session = connection.create_session
66
+ @producer = @session.create_producer(server_address)
67
+ @reply_address = "#{server_address}.#{Java::java.util::UUID.randomUUID.toString}"
68
+ @session.create_temporary_queue(@reply_address, @reply_address)
69
+ @reply_count_sync = Sync.new
70
+ @reply_count = 0
71
+ @send_count = 0
72
+ @reply_block = reply_block
73
+
74
+ # Start consuming replies. The Address and Queue names are the same
75
+ connection.on_message(:queue_name => @reply_address) {|message| process_reply(message) }
76
+ end
77
+
78
+ # Return the current message count
79
+ def reply_count
80
+ @reply_count_sync.synchronize(:SH) { @reply_count }
81
+ end
82
+
83
+ # Send a message to the server, setting the reply to address to the temporary
84
+ # address created by this pattern
85
+ #
86
+ # Sending of messages should be done by only one thread at a time since
87
+ # this pattern shares the same session and producer for sending messages
88
+ #
89
+ # Returns the total number of messages sent so far in this batch
90
+ def send(message)
91
+ message.reply_to_address = @reply_address
92
+ @producer.send(message)
93
+ @send_count += 1
94
+ end
95
+
96
+ # Retry Sending a message to the server, setting the reply to address to the
97
+ # temporary address created by this pattern
98
+ #
99
+ # Only call this method when a reply is received and we want to resend a
100
+ # previous request
101
+ #
102
+ # Note: This method will decrement the number of messages received by 1
103
+ # and will Not increment the number of messages sent, since it is
104
+ # considered to have already been sent
105
+ #
106
+ # ReSending and Sending of messages should be done by only one thread at a time since
107
+ # this pattern shares the same session and producer for sending messages
108
+ # #TODO Should we rather just add a Sync around the producer?
109
+ # What if a resend is being done in the reply handler?
110
+ #
111
+ # Returns the total number of messages sent so far in this batch
112
+ def resend(message)
113
+ message.reply_to_address = @reply_address
114
+
115
+ # Decrement Reply Message counter
116
+ @reply_count_sync.synchronize(:EX) { @reply_count -= 1 }
117
+ @producer.send(message)
118
+ end
119
+
120
+ # Receive Reply messages, calling the supplied reply handler block to support
121
+ # custom error handling
122
+ #
123
+ # Returns result of reply block supplied to constructor
124
+ def process_reply(message)
125
+ # Increment reply message counter
126
+ @reply_count_sync.synchronize(:EX) { @reply_count += 1 }
127
+
128
+ result = @reply_block.call(message) if @reply_block
129
+ message.acknowledge
130
+ result
131
+ end
132
+
133
+ # Release resources used by this pattern
134
+ def close
135
+ @producer.close
136
+ @session.close
137
+ end
138
+
139
+ # Wait for replies from server until the required number of responses has been
140
+ # received based on the completion ratio
141
+ #
142
+ # For example a completion ration of 0.8 will wait for at least 80% of replies
143
+ # to be received. So if 10 requests were sent this method would only return
144
+ # once 8 or more replies have been received
145
+ #
146
+ # #TODO Need a Timeout here
147
+ def wait_for_outstanding_replies
148
+ while self.reply_count >= self.completion_ratio * self.send_count
149
+ sleep 0.1
150
+ end
151
+ end
152
+
153
+ # Wait for replies from server until the required number of responses has been
154
+ # received based on the completion ratio
155
+ #
156
+ # #TODO Need a Timeout here
157
+ def wait_for_all_outstanding_replies
158
+ while self.reply_count >= self.send_count
159
+ sleep 0.1
160
+ end
161
+ end
162
+
163
+ end
@@ -18,14 +18,15 @@ config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
18
18
  # Create a HornetQ session
19
19
  HornetQ::Client::Connection.session(config) do |session|
20
20
  # Create a non-durable TestQueue to receive messages sent to the TestAddress
21
- session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
21
+ session.create_queue_ignore_exists('jms.queue.SampleQueue', 'jms.queue.SampleQueue', false)
22
22
  start_time = Time.now
23
23
 
24
- session.producer('TestAddress') do |producer|
24
+ session.producer('jms.queue.SampleQueue') do |producer|
25
25
  puts "Sending messages"
26
26
  (1..count).each do |i|
27
27
  message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
28
- message.body = "#{Time.now}: ### Hello, World ###"
28
+ message.body = "#{Time.now}: #{i} : ### Hello, World ###"
29
+ message.user_id = Java::org.hornetq.utils::UUIDGenerator.getInstance.generateUUID
29
30
 
30
31
  producer.send(message)
31
32
  puts "#{i}\n" if i%1000 == 0
@@ -10,13 +10,16 @@ require 'rubygems'
10
10
  require 'hornetq'
11
11
 
12
12
  # Using Connect.start since a session must be started in order to consume messages
13
- HornetQ::Client::Connection.start_session('hornetq://localhost') do |session|
13
+ HornetQ::Client::Connection.start_session(
14
+ :connection => {:uri => 'hornetq://stage1'} ,
15
+ :session => { :username => 'clarity', :password => 'clarityrul3s'}) do |session|
14
16
 
15
17
  # Create a non-durable TestQueue to receive messages sent to the TestAddress
16
- session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
18
+ session.create_queue_ignore_exists('jms.queue.SampleQueue', 'jms.queue.SampleQueue', false)
17
19
 
18
20
  # Consume All messages from the queue and gather statistics
19
- stats = session.consume(:queue_name => 'TestQueue', :timeout=> 0, :statistics=>true) do |message|
21
+ stats = session.consume(:queue_name => 'jms.queue.SampleQueue', :timeout=> 0, :statistics=>true) do |message|
22
+ puts "Body Size:#{message.body_size}"
20
23
  p message
21
24
  puts "=================================="
22
25
  message.acknowledge
@@ -77,7 +77,7 @@ class BatchClientPattern
77
77
  start_time = Time.now
78
78
  total_count.times do |i|
79
79
  message = @session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
80
- message.reply_to_queue_name = @consumer.queue_name
80
+ message.reply_to_address = @consumer.queue_name
81
81
  message.body = "Request Current Time. #{i}"
82
82
  @producer.send(message)
83
83
  print "."
@@ -10,7 +10,7 @@ client:
10
10
  :session:
11
11
  :username: guest
12
12
  :password: guest
13
- :auto_close: true
13
+ :managed: true
14
14
  :session_pool:
15
15
  :pool_size: 3
16
16
  :pool_warn_timeout: 0.25
@@ -174,7 +174,8 @@ module HornetQ
174
174
  @sessions = []
175
175
  @consumers = []
176
176
  # In-VM Transport has no fail-over or additional parameters
177
- if uri.host == 'invm'
177
+ @is_invm = uri.host == 'invm'
178
+ if @is_invm
178
179
  transport = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::INVM_CONNECTOR_CLASS_NAME)
179
180
  @connection = Java::org.hornetq.api.core.client.HornetQClient.create_client_session_factory(transport)
180
181
  elsif params[:protocol]
@@ -212,6 +213,11 @@ module HornetQ
212
213
  end
213
214
  end
214
215
 
216
+ # Return true if this connection was configured in INVM transport protocol
217
+ def invm?
218
+ @is_invm
219
+ end
220
+
215
221
  # Create a new HornetQ session
216
222
  #
217
223
  # Note: Remember to close the session once it is no longer used.
@@ -316,6 +322,7 @@ module HornetQ
316
322
  #
317
323
  def create_session(params={})
318
324
  raise "HornetQ::Client::Connection Already Closed" unless @connection
325
+ params ||= {}
319
326
  session = @connection.create_session(
320
327
  params[:username],
321
328
  params[:password],
@@ -487,11 +494,11 @@ module HornetQ
487
494
  # Start all sessions managed by this connection
488
495
  #
489
496
  # Sessions created via #create_session are not managed unless
490
- # :auto_close => true was specified when the session was created
497
+ # :managed => true was specified when the session was created
491
498
  #
492
499
  # Session are Only managed when created through the following methods:
493
500
  # Connection#on_message
494
- # Connection#create_session And :auto_close => true
501
+ # Connection#create_session And :managed => true
495
502
  #
496
503
  # This call does not do anything to sessions in a session pool
497
504
  def start_managed_sessions
@@ -123,18 +123,19 @@ class Java::OrgHornetqCoreClientImpl::ClientMessageImpl
123
123
  contains_property(Java::OrgHornetqCoreClientImpl::ClientMessageImpl::REPLYTO_HEADER_NAME)
124
124
  end
125
125
 
126
- # Return the Reply To Queue Name as a string
127
- def reply_to_queue_name
126
+ # Return the Reply To Address as a string
127
+ def reply_to_address
128
128
  get_string_property(Java::OrgHornetqCoreClientImpl::ClientMessageImpl::REPLYTO_HEADER_NAME)
129
129
  end
130
130
 
131
- # Set the Reply To Queue Name
131
+ # Set the Reply To Address
132
132
  # When supplied, the consumer of the message is expected to send a response to the
133
- # specified queue. However, this is by convention, so no response is guaranteed
133
+ # specified address. However, this is by convention, so no response is guaranteed
134
+ #
134
135
  # Note: Rather than set this directly, consider creating a Client::Requestor:
135
136
  # requestor = session.create_requestor('Request Queue')
136
137
  #
137
- def reply_to_queue_name=(name)
138
+ def reply_to_address=(name)
138
139
  val = nil
139
140
  if name.is_a? Java::org.hornetq.api.core::SimpleString
140
141
  val = name
@@ -1,5 +1,30 @@
1
1
  # TODO Support send(String)
2
2
  # TODO Support send(:data => string, :durable=>true, :address=>'MyAddress')
3
3
  #
4
+ # See: http://hornetq.sourceforge.net/docs/hornetq-2.1.2.Final/api/index.html?org/hornetq/api/core/client/ClientProducer.html
5
+ #
6
+ # Other methods still directly accessible through this class:
7
+ #
8
+ # void send(Message message)
9
+ # Sends a message to an address
10
+ # void send(String address, Message message)
11
+ # Sends a message to the specified address instead of the ClientProducer's address
12
+ #
13
+ # close()
14
+ # Closes the ClientProducer
15
+ # boolean closed?
16
+ # Returns whether the producer is closed or not
17
+ #
18
+ # SimpleString address()
19
+ # Returns the address where messages will be sent
20
+ #
21
+ # int max_rate()
22
+ # Returns the maximum rate at which a ClientProducer can send messages per second
23
+ #
24
+ # boolean block_on_durable_send?
25
+ # Returns whether the producer will block when sending durable messages
26
+ # boolean block_on_non_durable_send?
27
+ # Returns whether the producer will block when sending non-durable messages
28
+ #
4
29
  class Java::org.hornetq.core.client.impl::ClientProducerImpl
5
30
  end
@@ -25,14 +25,18 @@ module HornetQ::Client
25
25
  # Send a reply to the received request message
26
26
  # request: is the message received
27
27
  # reply: is the message to send to the client
28
+ #
29
+ # Note: A reply is only sent if it is a request message. This means that
30
+ # the message must have a property named Java::OrgHornetqCoreClientImpl::ClientMessageImpl::REPLYTO_HEADER_NAME
31
+ # containing the name of the address to which the response should be sent
28
32
  def reply(request_message, reply_message)
29
33
  if request_message.request?
30
34
  # Reply should have same durability as request
31
35
  reply_message.durable = request_message.durable?
32
- reply_to = request_message.getSimpleStringProperty(Java::OrgHornetqCoreClientImpl::ClientMessageImpl::REPLYTO_HEADER_NAME);
33
36
  # Send request message id back in reply message for correlation purposes
34
37
  reply_message.user_id = request_message.user_id
35
- @producer.send(reply_to, reply_message)
38
+ # Send to Reply to address supplied by the caller
39
+ @producer.send(request_message.reply_to_address, reply_message)
36
40
  #puts "Sent reply to #{reply_to.to_s}: #{reply_message.inspect}"
37
41
  end
38
42
  request_message.acknowledge
@@ -104,7 +104,7 @@ module HornetQ::Client
104
104
  producer = s.create_producer(address)
105
105
  block.call(s, producer)
106
106
  ensure
107
- producer.close
107
+ producer.close if producer
108
108
  end
109
109
  end
110
110
  end
@@ -41,12 +41,24 @@ module HornetQ
41
41
  acceptor_conf_set.add(acceptor)
42
42
  config.acceptor_configurations = acceptor_conf_set
43
43
 
44
+ more_acceptors = params.delete(:acceptor)
45
+ if more_acceptors
46
+ more_acceptors = [more_acceptors] unless more_acceptors.kind_of?(Array)
47
+ more_acceptors.each do |uri_str|
48
+ uri = HornetQ::URI.new(uri_str)
49
+ p = uri.params.merge('host' => uri.host, 'port' => uri.port)
50
+ puts p.inspect
51
+ accept = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::NETTY_ACCEPTOR_CLASS_NAME, p)
52
+ acceptor_conf_set.add(accept)
53
+ end
54
+ end
55
+
44
56
  if Java::org.hornetq.core.journal.impl.AIOSequentialFileFactory.isSupported
45
57
  config.journal_type = Java::org.hornetq.core.server.JournalType::ASYNCIO
46
58
  else
47
59
  require 'rbconfig'
48
60
  if Config::CONFIG['target_os'] == 'linux'
49
- HornetQ.logger.info("AIO wasn't located on this platform, it will fall back to using pure Java NIO. Install LibAIO to enable the AIO journal")
61
+ HornetQ.logger.info("AIO wasn't located on this platform, it will fall back to using pure Java NIO. Install libaio and libHornetQAIO to enable the AIO journal")
50
62
  end
51
63
  config.journal_type = Java::org.hornetq.core.server.JournalType::NIO
52
64
  end
data/lib/hornetq/uri.rb CHANGED
@@ -47,7 +47,7 @@ module HornetQ
47
47
  value = false if value == 'false'
48
48
  value = value.to_i if value =~ /^\d+$/
49
49
  value = value.to_f if value =~ /^\d+\.\d*$/
50
- @params[key.to_sym] = value
50
+ @params[key] = value
51
51
  end
52
52
  end
53
53
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 1
9
- version: 0.3.1
8
+ - 2
9
+ version: 0.3.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Reid Morrison
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-23 00:00:00 -05:00
18
+ date: 2011-03-09 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -48,8 +48,13 @@ files:
48
48
  - Rakefile
49
49
  - README.md
50
50
  - bin/hornetq_server
51
+ - bin/data/bindings/hornetq-bindings-1.bindings
52
+ - bin/data/bindings/hornetq-bindings-2.bindings
53
+ - bin/data/journal/hornetq-data-1.hq
54
+ - bin/data/journal/hornetq-data-2.hq
51
55
  - examples/README
52
56
  - examples/advanced/batch_client.rb
57
+ - examples/advanced/batch_requestor_pattern.rb
53
58
  - examples/advanced/bytes_producer.rb
54
59
  - examples/advanced/client.rb
55
60
  - examples/advanced/client_session_pooling.rb