jruby-hornetq 0.2.0.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.
- data/HISTORY.md +5 -0
- data/LICENSE.txt +201 -0
- data/README.md +249 -0
- data/Rakefile +23 -0
- data/bin/hornetq_server +70 -0
- data/examples/backup_server.yml +4 -0
- data/examples/batch_client.rb +124 -0
- data/examples/client.rb +49 -0
- data/examples/consumer.rb +35 -0
- data/examples/hornetq.yml +36 -0
- data/examples/live_server.yml +5 -0
- data/examples/multi_client.rb +63 -0
- data/examples/multi_consumer.rb +54 -0
- data/examples/producer.rb +36 -0
- data/examples/run_broker.rb +59 -0
- data/examples/server.rb +42 -0
- data/examples/standalone_server.yml +3 -0
- data/lib/hornetq/client_requestor.rb +30 -0
- data/lib/hornetq/client_server.rb +47 -0
- data/lib/hornetq/hornet_q_client.rb +388 -0
- data/lib/hornetq/lib/hornetq-core-client.jar +0 -0
- data/lib/hornetq/lib/hornetq-core.jar +0 -0
- data/lib/hornetq/lib/netty.jar +0 -0
- data/lib/hornetq/org_hornetq_api_core_client_client_session.rb +16 -0
- data/lib/hornetq/org_hornetq_core_client_impl_client_message_impl.rb +166 -0
- data/lib/hornetq/org_hornetq_core_client_impl_client_producer_impl.rb +5 -0
- data/lib/hornetq/org_hornetq_utils_typed_properties.rb +60 -0
- data/lib/hornetq/session_pool.rb +175 -0
- data/lib/hornetq.rb +9 -0
- metadata +106 -0
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'gene_pool'
|
2
|
+
|
3
|
+
module HornetQClient
|
4
|
+
# Since a Session can only be used by one thread at a time, we could create
|
5
|
+
# a Session for every thread. That could result in excessive unused Sessions.
|
6
|
+
# An alternative is to create a pool of sessions that can be shared by
|
7
|
+
# multiple threads.
|
8
|
+
#
|
9
|
+
# Each thread can requests a session and then return it once it is no longer
|
10
|
+
# needed by that thread. Rather than requesting a session directly using
|
11
|
+
# SessionPool::session, it is recommended to pass a block so that the Session
|
12
|
+
# is automatically returned to the pool. For example:
|
13
|
+
# session_pool.session do |session|
|
14
|
+
# .. do something with the session here
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# Parameters:
|
18
|
+
# see regular session parameters from: HornetQClient::Factory::create_session
|
19
|
+
#
|
20
|
+
# Additional parameters for controlling the session pool itself
|
21
|
+
# :pool_name Name of the pool as it shows up in the logger.
|
22
|
+
# Default: 'HornetQClient::SessionPool'
|
23
|
+
# :pool_size Maximum Pool Size. Default: 10
|
24
|
+
# The pool only grows as needed and will never exceed
|
25
|
+
# :pool_size
|
26
|
+
# :pool_warn_timeout Amount of time to wait before logging a warning when a
|
27
|
+
# session in the pool is not available. Measured in seconds
|
28
|
+
# Default: 5.0
|
29
|
+
# :pool_logger Supply a logger that responds to #debug, #info, #warn and #debug?
|
30
|
+
# For example: Rails.logger
|
31
|
+
# Default: None.
|
32
|
+
# Example:
|
33
|
+
# session_pool = factory.create_session_pool(config)
|
34
|
+
# session_pool.session do |session|
|
35
|
+
# ....
|
36
|
+
# end
|
37
|
+
class SessionPool
|
38
|
+
def initialize(factory, parms={})
|
39
|
+
# Save Session parms since it will be used every time a new session is
|
40
|
+
# created in the pool
|
41
|
+
session_parms = parms.dup
|
42
|
+
# TODO Use same logger as HornetQ?
|
43
|
+
# TODO How to shrink unused connections?
|
44
|
+
@pool = GenePool.new(
|
45
|
+
:name => parms[:pool_name] || self.class.name,
|
46
|
+
:pool_size => parms[:pool_size] || 10,
|
47
|
+
:warn_timeout => parms[:pool_warn_timeout] || 5,
|
48
|
+
:logger => parms[:pool_logger]) do
|
49
|
+
s = factory.create_session(session_parms)
|
50
|
+
# Start the session since it will be used immediately upon creation
|
51
|
+
s.start
|
52
|
+
puts "Creating Session"
|
53
|
+
s
|
54
|
+
end
|
55
|
+
|
56
|
+
# Obtain a session from the pool and pass it to the supplied block
|
57
|
+
# The session is automatically returned to the pool once the block completes
|
58
|
+
def session(&block)
|
59
|
+
@pool.with_connection {|s| block.call(s)}
|
60
|
+
end
|
61
|
+
|
62
|
+
# Obtain a session from the pool and create a ClientConsumer.
|
63
|
+
# Pass both into the supplied block.
|
64
|
+
# Once the block is complete the consumer is closed and the session is
|
65
|
+
# returned to the pool.
|
66
|
+
#
|
67
|
+
# See HornetQClient::ClientConsumer for more information on the consumer
|
68
|
+
# parameters
|
69
|
+
#
|
70
|
+
# Example
|
71
|
+
# session_pool.consumer('MyQueue') do |session, consumer|
|
72
|
+
# message = consumer.receive(timeout)
|
73
|
+
# puts message.body if message
|
74
|
+
# end
|
75
|
+
def consumer(queue_name, &block)
|
76
|
+
session do |s|
|
77
|
+
consumer = nil
|
78
|
+
begin
|
79
|
+
consumer = s.create_consumer(queue_name)
|
80
|
+
block.call(s, consumer)
|
81
|
+
ensure
|
82
|
+
consumer.close
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Obtain a session from the pool and create a ClientProducer.
|
88
|
+
# Pass both into the supplied block.
|
89
|
+
# Once the block is complete the consumer is closed and the session is
|
90
|
+
# returned to the pool.
|
91
|
+
#
|
92
|
+
# See HornetQClient::ClientProducer for more information on the producer
|
93
|
+
# parameters
|
94
|
+
#
|
95
|
+
# Example
|
96
|
+
# session_pool.producer('MyAddress') do |session, producer|
|
97
|
+
# message = session.create_message(HornetQClient::Message::TEXT_TYPE,false)
|
98
|
+
# message << "#{Time.now}: ### Hello, World ###"
|
99
|
+
# producer.send(message)
|
100
|
+
# end
|
101
|
+
def producer(address, &block)
|
102
|
+
session do |s|
|
103
|
+
producer = nil
|
104
|
+
begin
|
105
|
+
producer = s.create_producer(address)
|
106
|
+
block.call(s, producer)
|
107
|
+
ensure
|
108
|
+
producer.close
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Obtain a session from the pool and create a ClientRequestor.
|
114
|
+
# Pass both into the supplied block.
|
115
|
+
# Once the block is complete the requestor is closed and the session is
|
116
|
+
# returned to the pool.
|
117
|
+
#
|
118
|
+
# See HornetQClient::ClientRequestor for more information on the requestor
|
119
|
+
#
|
120
|
+
# Example
|
121
|
+
# session_pool.requestor(parms) do |session, requestor|
|
122
|
+
# ....
|
123
|
+
# end
|
124
|
+
def requestor(address, &block)
|
125
|
+
session do |s|
|
126
|
+
requestor = nil
|
127
|
+
begin
|
128
|
+
requestor = s.create_requestor(address)
|
129
|
+
block.call(s, requestor)
|
130
|
+
ensure
|
131
|
+
requestor.close
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# Obtain a session from the pool and create a ClientServer.
|
137
|
+
# Pass both into the supplied block.
|
138
|
+
# Once the block is complete the requestor is closed and the session is
|
139
|
+
# returned to the pool.
|
140
|
+
#
|
141
|
+
# See HornetQClient::ClientServer for more information on the server
|
142
|
+
#
|
143
|
+
# Example
|
144
|
+
# session_pool.server(queue, timeout) do |session, server|
|
145
|
+
# ....
|
146
|
+
# end
|
147
|
+
def server(queue, timeout=0, &block)
|
148
|
+
session do |s|
|
149
|
+
server = nil
|
150
|
+
begin
|
151
|
+
server = s.create_server(queue, timeout=0)
|
152
|
+
block.call(s, server)
|
153
|
+
ensure
|
154
|
+
server.close
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
# Immediately Close all sessions in the pool and release from the pool
|
160
|
+
#
|
161
|
+
# TODO: Allow an option to wait for active sessions to be returned before
|
162
|
+
# closing
|
163
|
+
def close
|
164
|
+
@pool.each do |s|
|
165
|
+
#@pool.remove(s)
|
166
|
+
s.close
|
167
|
+
#@pool.remove(s)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
data/lib/hornetq.rb
ADDED
@@ -0,0 +1,9 @@
|
|
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'
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jruby-hornetq
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: true
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
- alpha
|
10
|
+
version: 0.2.0.alpha
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Reid Morrison
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-19 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: gene_pool
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 1
|
30
|
+
- 1
|
31
|
+
- 1
|
32
|
+
version: 1.1.1
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: JRuby-HornetQ is a Java and Ruby library that exposes the HornetQ Java API in a ruby friendly way. For JRuby only.
|
36
|
+
email: rubywmq@gmail.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- HISTORY.md
|
45
|
+
- LICENSE.txt
|
46
|
+
- Rakefile
|
47
|
+
- README.md
|
48
|
+
- bin/hornetq_server
|
49
|
+
- examples/backup_server.yml
|
50
|
+
- examples/batch_client.rb
|
51
|
+
- examples/client.rb
|
52
|
+
- examples/consumer.rb
|
53
|
+
- examples/hornetq.yml
|
54
|
+
- examples/live_server.yml
|
55
|
+
- examples/multi_client.rb
|
56
|
+
- examples/multi_consumer.rb
|
57
|
+
- examples/producer.rb
|
58
|
+
- examples/run_broker.rb
|
59
|
+
- examples/server.rb
|
60
|
+
- examples/standalone_server.yml
|
61
|
+
- lib/hornetq.rb
|
62
|
+
- lib/hornetq/client_requestor.rb
|
63
|
+
- lib/hornetq/client_server.rb
|
64
|
+
- lib/hornetq/hornet_q_client.rb
|
65
|
+
- lib/hornetq/org_hornetq_api_core_client_client_session.rb
|
66
|
+
- lib/hornetq/org_hornetq_core_client_impl_client_message_impl.rb
|
67
|
+
- lib/hornetq/org_hornetq_core_client_impl_client_producer_impl.rb
|
68
|
+
- lib/hornetq/org_hornetq_utils_typed_properties.rb
|
69
|
+
- lib/hornetq/session_pool.rb
|
70
|
+
- lib/hornetq/lib/hornetq-core-client.jar
|
71
|
+
- lib/hornetq/lib/hornetq-core.jar
|
72
|
+
- lib/hornetq/lib/netty.jar
|
73
|
+
has_rdoc: true
|
74
|
+
homepage: http://www.reidmorrison.com/
|
75
|
+
licenses: []
|
76
|
+
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
segments:
|
94
|
+
- 1
|
95
|
+
- 3
|
96
|
+
- 1
|
97
|
+
version: 1.3.1
|
98
|
+
requirements: []
|
99
|
+
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.3.6
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: JRuby interface into HornetQ
|
105
|
+
test_files: []
|
106
|
+
|