jruby-hornetq 0.4.0 → 0.5.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +9 -0
- data/Gemfile.lock +30 -0
- data/HISTORY.md +6 -0
- data/README.md +33 -35
- data/Rakefile +14 -9
- data/examples/advanced/batch_client.rb +8 -8
- data/examples/advanced/batch_requestor_pattern.rb +34 -34
- data/examples/advanced/bytes_producer.rb +3 -3
- data/examples/advanced/client.rb +5 -5
- data/examples/advanced/client_session_pooling.rb +3 -3
- data/examples/advanced/consume_on_message.rb +5 -5
- data/examples/advanced/consumer.rb +2 -2
- data/examples/advanced/multi_client.rb +3 -3
- data/examples/advanced/producer.rb +3 -3
- data/examples/advanced/server.rb +4 -4
- data/examples/client-server/client.rb +4 -4
- data/examples/client-server/server.rb +4 -4
- data/examples/producer-consumer/consume_all.rb +2 -2
- data/examples/producer-consumer/consume_on_message.rb +5 -5
- data/examples/producer-consumer/consumer.rb +2 -2
- data/examples/producer-consumer/producer.rb +3 -3
- data/examples/resque/hornetq_job.rb +19 -19
- data/examples/resque/processor.rb +4 -4
- data/examples/resque/sleep_job.rb +3 -3
- data/lib/hornetq.rb +3 -2
- data/lib/hornetq/client.rb +4 -2
- data/lib/hornetq/client/connection.rb +86 -86
- data/lib/hornetq/client/message_handler.rb +1 -1
- data/lib/hornetq/client/org_hornetq_api_core_client_client_session.rb +67 -67
- data/lib/hornetq/client/org_hornetq_core_client_impl_client_consumer_impl.rb +11 -11
- data/lib/hornetq/client/org_hornetq_core_client_impl_client_message_impl.rb +126 -126
- data/lib/hornetq/client/org_hornetq_core_client_impl_client_producer_impl.rb +14 -14
- data/lib/hornetq/client/org_hornetq_utils_typed_properties.rb +6 -6
- data/lib/hornetq/client/requestor_pattern.rb +24 -24
- data/lib/hornetq/client/server_pattern.rb +4 -4
- data/lib/hornetq/client/session_pool.rb +18 -18
- data/lib/hornetq/common/logging.rb +1 -14
- data/lib/hornetq/java/hornetq-bootstrap.jar +0 -0
- data/lib/hornetq/java/hornetq-commons.jar +0 -0
- data/lib/hornetq/java/hornetq-core-client.jar +0 -0
- data/lib/hornetq/java/hornetq-journal.jar +0 -0
- data/lib/hornetq/java/hornetq-server.jar +0 -0
- data/lib/hornetq/java/jnp-client.jar +0 -0
- data/lib/hornetq/java/netty.jar +0 -0
- data/lib/hornetq/server.rb +4 -1
- data/lib/hornetq/version.rb +3 -0
- data/nbproject/private/private.properties +4 -0
- data/nbproject/private/private.xml +4 -0
- data/nbproject/private/rake-d.txt +4 -0
- data/nbproject/project.properties +11 -0
- data/nbproject/project.xml +17 -0
- data/test/client_connection_test.rb +25 -25
- data/test/logging_test.rb +3 -3
- metadata +131 -125
- data/bin/data/bindings/hornetq-bindings-1.bindings +0 -0
- data/bin/data/bindings/hornetq-bindings-2.bindings +0 -0
- data/bin/data/journal/hornetq-data-1.hq +0 -0
- data/bin/data/journal/hornetq-data-2.hq +0 -0
- data/lib/hornetq/common/log_delegate.rb +0 -48
- data/lib/hornetq/common/org_hornetq_core_logging_logger.rb +0 -60
- data/lib/hornetq/java/hornetq-core.jar +0 -0
@@ -2,30 +2,30 @@
|
|
2
2
|
# TODO Support send(:data => string, :durable=>true, :address=>'MyAddress')
|
3
3
|
#
|
4
4
|
# See: http://hornetq.sourceforge.net/docs/hornetq-2.1.2.Final/api/index.html?org/hornetq/api/core/client/ClientProducer.html
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Other methods still directly accessible through this class:
|
7
7
|
#
|
8
|
-
# void
|
8
|
+
# void send(Message message)
|
9
9
|
# Sends a message to an address
|
10
|
-
# void
|
10
|
+
# void send(String address, Message message)
|
11
11
|
# Sends a message to the specified address instead of the ClientProducer's address
|
12
|
-
#
|
13
|
-
#
|
12
|
+
#
|
13
|
+
# close()
|
14
14
|
# Closes the ClientProducer
|
15
|
-
# boolean
|
15
|
+
# boolean closed?
|
16
16
|
# Returns whether the producer is closed or not
|
17
|
-
#
|
18
|
-
# SimpleString
|
17
|
+
#
|
18
|
+
# SimpleString address()
|
19
19
|
# Returns the address where messages will be sent
|
20
|
-
#
|
21
|
-
# int
|
20
|
+
#
|
21
|
+
# int max_rate()
|
22
22
|
# Returns the maximum rate at which a ClientProducer can send messages per second
|
23
|
-
#
|
24
|
-
# boolean
|
23
|
+
#
|
24
|
+
# boolean block_on_durable_send?
|
25
25
|
# Returns whether the producer will block when sending durable messages
|
26
|
-
# boolean
|
26
|
+
# boolean block_on_non_durable_send?
|
27
27
|
# Returns whether the producer will block when sending non-durable messages
|
28
|
-
#
|
28
|
+
#
|
29
29
|
class Java::org.hornetq.core.client.impl::ClientProducerImpl
|
30
30
|
def send_with_retry(message)
|
31
31
|
first_time = true
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Used by HornetQ to move around HashMap messages
|
2
2
|
# Ruby methods added to make it behave like a Ruby Hash
|
3
|
-
class Java::org.hornetq.utils::TypedProperties
|
3
|
+
class Java::org.hornetq.utils::TypedProperties
|
4
4
|
# Get a property
|
5
5
|
def [](key)
|
6
6
|
value = getProperty(key)
|
@@ -28,7 +28,7 @@ class Java::org.hornetq.utils::TypedProperties
|
|
28
28
|
putSimpleStringProperty(key,val.to_s)
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
# Iterate through each key,value pair
|
33
33
|
def each_pair(&proc)
|
34
34
|
it = property_names.iterator
|
@@ -37,23 +37,23 @@ class Java::org.hornetq.utils::TypedProperties
|
|
37
37
|
proc.call(key.to_string, self[key])
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
# Convert Properties to a Ruby Hash
|
42
42
|
def to_h
|
43
43
|
h = {}
|
44
|
-
each_pair do |key, value|
|
44
|
+
each_pair do |key, value|
|
45
45
|
h[key] = value
|
46
46
|
end
|
47
47
|
h
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# Write Hash values into this TyedProperties instance
|
51
51
|
def from_h(hash)
|
52
52
|
hash.each_pair do |key,value|
|
53
53
|
self[key] = value
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
def inspect
|
58
58
|
"#{self.class.name}: #{to_h.inspect}"
|
59
59
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module HornetQ::Client
|
2
2
|
|
3
|
-
# Implements the Requestor Pattern
|
3
|
+
# Implements the Requestor Pattern
|
4
4
|
# Send a request to a server and wait for a reply
|
5
5
|
# Parameters
|
6
6
|
# * session
|
@@ -10,12 +10,12 @@ module HornetQ::Client
|
|
10
10
|
# Address to send requests to.
|
11
11
|
# It is expected that process listening to requests at this address has
|
12
12
|
# implemented the ServerPattern
|
13
|
-
# * reply_address
|
14
|
-
# If supplied the reply_address must already exist and will be used for
|
13
|
+
# * reply_address
|
14
|
+
# If supplied the reply_address must already exist and will be used for
|
15
15
|
# receiving responses
|
16
16
|
# If not supplied a temporary queue will be created and used by this instance
|
17
17
|
# of the RequestorPattern
|
18
|
-
# This optional parameter is normally not used
|
18
|
+
# This optional parameter is normally not used
|
19
19
|
# * reply_queue
|
20
20
|
# If a reply_address is supplied, the reply_queue name can be supplied if it
|
21
21
|
# differs from reply_address
|
@@ -37,26 +37,26 @@ module HornetQ::Client
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
# Synchronous Request and wait for reply
|
42
|
-
#
|
42
|
+
#
|
43
43
|
# Returns the message received, or nil if no message was received in the
|
44
44
|
# specified timeout.
|
45
|
-
#
|
45
|
+
#
|
46
46
|
# The supplied request_message is updated as follows
|
47
47
|
# * The property JMSReplyTo is set to the name of the reply to address
|
48
48
|
# * Creates and sets the message user_id if not already set
|
49
49
|
# * #TODO: The expiry is set to the message timeout if not already set
|
50
|
-
#
|
51
|
-
# Note:
|
50
|
+
#
|
51
|
+
# Note:
|
52
52
|
# * The request will only look for a reply message with the same
|
53
53
|
# user_id (message id) as the message that was sent. This is critical
|
54
54
|
# since a previous receive may have timed out and we do not want
|
55
|
-
# to pickup the reponse to an earlier request
|
56
|
-
#
|
55
|
+
# to pickup the reponse to an earlier request
|
56
|
+
#
|
57
57
|
# To receive a message after a timeout, call wait_for_reply with a nil message
|
58
58
|
# id to receive any message on the queue
|
59
|
-
#
|
59
|
+
#
|
60
60
|
# Use: submit_request & then wait_for_reply to break it into
|
61
61
|
# two separate calls
|
62
62
|
def request(request_message, timeout)
|
@@ -64,19 +64,19 @@ module HornetQ::Client
|
|
64
64
|
message_id = submit_request(request_message)
|
65
65
|
wait_for_reply(message_id, timeout)
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
# Asynchronous Request
|
69
69
|
# Use: submit_request & then wait_for_reply to break the request into
|
70
70
|
# two separate calls.
|
71
|
-
#
|
71
|
+
#
|
72
72
|
# For example, submit the request now, do some work, then later on
|
73
73
|
# in the same thread wait for the reply.
|
74
|
-
#
|
74
|
+
#
|
75
75
|
# The supplied request_message is updated as follows
|
76
76
|
# * The property JMSReplyTo is set to the name of the reply to address
|
77
77
|
# * Creates and sets the message user_id if not already set
|
78
78
|
# * #TODO: The expiry is set to the message timeout if not already set
|
79
|
-
#
|
79
|
+
#
|
80
80
|
# Returns Message id of the message that was sent
|
81
81
|
def submit_request(request_message)
|
82
82
|
request_message.reply_to_address = @reply_address
|
@@ -84,16 +84,16 @@ module HornetQ::Client
|
|
84
84
|
@producer.send(request_message)
|
85
85
|
request_message.user_id
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
# Asynchronous wait for reply
|
89
|
-
#
|
89
|
+
#
|
90
90
|
# Parameters:
|
91
|
-
# user_id: the user defined id to correlate a response for
|
92
|
-
#
|
91
|
+
# user_id: the user defined id to correlate a response for
|
92
|
+
#
|
93
93
|
# Supply a nil user_id to receive any message from the queue
|
94
|
-
#
|
94
|
+
#
|
95
95
|
# Returns the message received
|
96
|
-
#
|
96
|
+
#
|
97
97
|
# Note: Call submit_request before calling this method
|
98
98
|
def wait_for_reply(user_id, timeout)
|
99
99
|
# We only want the reply to the supplied message_id, so set filter on message id
|
@@ -102,11 +102,11 @@ module HornetQ::Client
|
|
102
102
|
consumer.receive(timeout)
|
103
103
|
end
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
def close
|
107
107
|
@session.delete_queue(@reply_queue) if @destroy_temp_queue
|
108
108
|
@producer.close if @producer
|
109
109
|
end
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module HornetQ::Client
|
2
|
-
# Create a Server following the ServerPattern for receiving requests and
|
2
|
+
# Create a Server following the ServerPattern for receiving requests and
|
3
3
|
# replying to arbitrary queues
|
4
4
|
# Create an instance of this class per thread
|
5
5
|
class ServerPattern
|
@@ -9,13 +9,13 @@ module HornetQ::Client
|
|
9
9
|
@producer = session.create_producer
|
10
10
|
@timeout = timeout
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def run(&block)
|
14
14
|
while request_message = @consumer.receive(@timeout)
|
15
15
|
# Block should return a message reply object, pass in request
|
16
16
|
# TODO: ensure..
|
17
17
|
reply_message = block.call(request_message)
|
18
|
-
|
18
|
+
|
19
19
|
# Send a reply?
|
20
20
|
reply(request_message, reply_message) if request_message.request?
|
21
21
|
request_message.acknowledge
|
@@ -42,7 +42,7 @@ module HornetQ::Client
|
|
42
42
|
end
|
43
43
|
request_message.acknowledge
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
# Close out resources
|
47
47
|
def close
|
48
48
|
@consumer.close if @consumer
|
@@ -58,11 +58,11 @@ module HornetQ::Client
|
|
58
58
|
@pool.with_connection &block
|
59
59
|
end
|
60
60
|
|
61
|
-
# Obtain a session from the pool and create a ClientConsumer.
|
62
|
-
# Pass both into the supplied block.
|
61
|
+
# Obtain a session from the pool and create a ClientConsumer.
|
62
|
+
# Pass both into the supplied block.
|
63
63
|
# Once the block is complete the consumer is closed and the session is
|
64
64
|
# returned to the pool.
|
65
|
-
#
|
65
|
+
#
|
66
66
|
# See HornetQ::Client::ClientConsumer for more information on the consumer
|
67
67
|
# parameters
|
68
68
|
#
|
@@ -82,12 +82,12 @@ module HornetQ::Client
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
85
|
-
|
86
|
-
# Obtain a session from the pool and create a ClientProducer.
|
87
|
-
# Pass both into the supplied block.
|
85
|
+
|
86
|
+
# Obtain a session from the pool and create a ClientProducer.
|
87
|
+
# Pass both into the supplied block.
|
88
88
|
# Once the block is complete the consumer is closed and the session is
|
89
89
|
# returned to the pool.
|
90
|
-
#
|
90
|
+
#
|
91
91
|
# See HornetQ::Client::ClientProducer for more information on the producer
|
92
92
|
# parameters
|
93
93
|
#
|
@@ -108,12 +108,12 @@ module HornetQ::Client
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
# Obtain a session from the pool and create a Client::Requestor.
|
113
|
-
# Pass both into the supplied block.
|
113
|
+
# Pass both into the supplied block.
|
114
114
|
# Once the block is complete the requestor is closed and the session is
|
115
115
|
# returned to the pool.
|
116
|
-
#
|
116
|
+
#
|
117
117
|
# See HornetQ::Client::Requestor for more information on the requestor
|
118
118
|
#
|
119
119
|
# Example
|
@@ -131,12 +131,12 @@ module HornetQ::Client
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
135
|
# Obtain a session from the pool and create a Client::Server.
|
136
|
-
# Pass both into the supplied block.
|
136
|
+
# Pass both into the supplied block.
|
137
137
|
# Once the block is complete the requestor is closed and the session is
|
138
138
|
# returned to the pool.
|
139
|
-
#
|
139
|
+
#
|
140
140
|
# See HornetQ::Client::Server for more information on the server
|
141
141
|
#
|
142
142
|
# Example
|
@@ -154,10 +154,10 @@ module HornetQ::Client
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
# Immediately Close all sessions in the pool and release from the pool
|
159
|
-
#
|
160
|
-
# TODO: Allow an option to wait for active sessions to be returned before
|
159
|
+
#
|
160
|
+
# TODO: Allow an option to wait for active sessions to be returned before
|
161
161
|
# closing
|
162
162
|
def close
|
163
163
|
@pool.each do |s|
|
@@ -166,9 +166,9 @@ module HornetQ::Client
|
|
166
166
|
#@pool.remove(s)
|
167
167
|
end
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
end
|
173
173
|
|
174
174
|
end
|
@@ -2,20 +2,13 @@
|
|
2
2
|
module HornetQ
|
3
3
|
# Returns the logger being used by both HornetQ and jruby-hornetq
|
4
4
|
def self.logger
|
5
|
-
@logger ||= (self.rails_logger || self.
|
5
|
+
@logger ||= (self.rails_logger || self.ruby_logger)
|
6
6
|
end
|
7
7
|
|
8
8
|
# Replace the logger for both HornetQ and jruby-hornetq
|
9
9
|
# TODO Directly support Log4J as logger since HornetQ has direct support for Log4J
|
10
10
|
def self.logger=(logger)
|
11
11
|
@logger = logger
|
12
|
-
# Also replace the HornetQ logger
|
13
|
-
if @logger
|
14
|
-
Java::org.hornetq.core.logging::Logger.setDelegateFactory(HornetQ::LogDelegateFactory.new)
|
15
|
-
else
|
16
|
-
Java::org.hornetq.core.logging::Logger.reset
|
17
|
-
end
|
18
|
-
# TODO org.hornetq.core.logging.Logger.setDelegateFactory(org.hornetq.integration.logging.Log4jLogDelegateFactory.new)
|
19
12
|
end
|
20
13
|
|
21
14
|
# Use the ruby logger, but add needed trace level logging which will result
|
@@ -36,10 +29,4 @@ module HornetQ
|
|
36
29
|
(defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER.respond_to?(:debug) && RAILS_DEFAULT_LOGGER)
|
37
30
|
end
|
38
31
|
|
39
|
-
# By default we use the HornetQ Logger
|
40
|
-
def self.default_logger
|
41
|
-
# Needs an actual Java class, so give it: org.hornetq.api.core.client::HornetQClient
|
42
|
-
Java::org.hornetq.core.logging::Logger.getLogger(org.hornetq.api.core.client::HornetQClient)
|
43
|
-
end
|
44
|
-
|
45
32
|
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/hornetq/java/netty.jar
CHANGED
Binary file
|
data/lib/hornetq/server.rb
CHANGED
@@ -2,8 +2,11 @@ module HornetQ
|
|
2
2
|
module Server
|
3
3
|
# Only load as needed
|
4
4
|
def self.load_requirements
|
5
|
-
HornetQ.require_jar '
|
5
|
+
HornetQ.require_jar 'jnp-client'
|
6
6
|
HornetQ.require_jar 'netty'
|
7
|
+
HornetQ.require_jar 'hornetq-commons'
|
8
|
+
HornetQ.require_jar 'hornetq-journal'
|
9
|
+
HornetQ.require_jar 'hornetq-server'
|
7
10
|
require 'hornetq/server/org_hornetq_core_server_hornet_q_server'
|
8
11
|
end
|
9
12
|
|
@@ -0,0 +1,4 @@
|
|
1
|
+
file.reference.jruby-hornetq-bin=/Users/rmorrison/Sandbox/jruby-hornetq/bin
|
2
|
+
file.reference.jruby-hornetq-examples=/Users/rmorrison/Sandbox/jruby-hornetq/examples
|
3
|
+
file.reference.jruby-hornetq-lib=/Users/rmorrison/Sandbox/jruby-hornetq/lib
|
4
|
+
file.reference.jruby-hornetq-test=/Users/rmorrison/Sandbox/jruby-hornetq/test
|
@@ -0,0 +1,11 @@
|
|
1
|
+
bin.dir=${file.reference.jruby-hornetq-bin}
|
2
|
+
examples.dir=${file.reference.jruby-hornetq-examples}
|
3
|
+
file.reference.jruby-hornetq-bin=bin
|
4
|
+
file.reference.jruby-hornetq-examples=examples
|
5
|
+
file.reference.jruby-hornetq-lib=lib
|
6
|
+
file.reference.jruby-hornetq-test=test
|
7
|
+
main.file=
|
8
|
+
platform.active=JRuby
|
9
|
+
source.encoding=UTF-8
|
10
|
+
src.dir=${file.reference.jruby-hornetq-lib}
|
11
|
+
test.src.dir=${file.reference.jruby-hornetq-test}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project xmlns="http://www.netbeans.org/ns/project/1">
|
3
|
+
<type>org.netbeans.modules.ruby.rubyproject</type>
|
4
|
+
<configuration>
|
5
|
+
<data xmlns="http://www.netbeans.org/ns/ruby-project/1">
|
6
|
+
<name>jruby-hornetq</name>
|
7
|
+
<source-roots>
|
8
|
+
<root id="src.dir"/>
|
9
|
+
<root id="examples.dir"/>
|
10
|
+
<root id="bin.dir"/>
|
11
|
+
</source-roots>
|
12
|
+
<test-roots>
|
13
|
+
<root id="test.src.dir"/>
|
14
|
+
</test-roots>
|
15
|
+
</data>
|
16
|
+
</configuration>
|
17
|
+
</project>
|