jruby-jms 0.11.0 → 0.11.1
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/Rakefile +1 -1
- data/lib/jms/session_pool.rb +22 -7
- data/test/message_test.rb +5 -5
- data/test/session_pool_test.rb +86 -0
- metadata +3 -2
data/HISTORY.md
CHANGED
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-jms'
|
12
|
-
s.version = '0.11.
|
12
|
+
s.version = '0.11.1'
|
13
13
|
s.author = 'Reid Morrison'
|
14
14
|
s.email = 'rubywmq@gmail.com'
|
15
15
|
s.homepage = 'https://github.com/reidmorrison/jruby-jms'
|
data/lib/jms/session_pool.rb
CHANGED
@@ -24,7 +24,7 @@ module JMS
|
|
24
24
|
# Default: 5.0
|
25
25
|
# :pool_logger Supply a logger that responds to #debug, #info, #warn and #debug?
|
26
26
|
# For example: Rails.logger
|
27
|
-
# Default:
|
27
|
+
# Default: JMS.logger
|
28
28
|
# Example:
|
29
29
|
# session_pool = connection.create_session_pool(config)
|
30
30
|
# session_pool.session do |session|
|
@@ -35,7 +35,7 @@ module JMS
|
|
35
35
|
# Save Session params since it will be used every time a new session is
|
36
36
|
# created in the pool
|
37
37
|
session_params = params.nil? ? {} : params.dup
|
38
|
-
logger = session_params[:pool_logger]
|
38
|
+
logger = session_params[:pool_logger] || JMS.logger
|
39
39
|
# Define how GenePool can create new sessions
|
40
40
|
@pool = GenePool.new(
|
41
41
|
:name => session_params[:pool_name] || self.class.name,
|
@@ -54,10 +54,22 @@ module JMS
|
|
54
54
|
|
55
55
|
# Obtain a session from the pool and pass it to the supplied block
|
56
56
|
# The session is automatically returned to the pool once the block completes
|
57
|
+
#
|
58
|
+
# In the event a JMS Exception is thrown the session will be closed and removed
|
59
|
+
# from the pool to prevent re-using sessions that are no longer valid
|
57
60
|
def session(&block)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
s = nil
|
62
|
+
begin
|
63
|
+
s = @pool.checkout
|
64
|
+
block.call(s)
|
65
|
+
rescue javax.jms.JMSException => e
|
66
|
+
s.close rescue nil
|
67
|
+
@pool.remove(s)
|
68
|
+
s = nil # Do not check back in since we have removed it
|
69
|
+
raise e
|
70
|
+
ensure
|
71
|
+
@pool.checkin(s) if s
|
72
|
+
end
|
61
73
|
end
|
62
74
|
|
63
75
|
# Obtain a session from the pool and create a MessageConsumer.
|
@@ -133,13 +145,16 @@ module JMS
|
|
133
145
|
|
134
146
|
# Immediately Close all sessions in the pool and release from the pool
|
135
147
|
#
|
148
|
+
# Note: This is an immediate close, active sessions will be aborted
|
149
|
+
#
|
150
|
+
# Note: Once closed a session pool cannot be re-used. A new instance must
|
151
|
+
# be created
|
152
|
+
#
|
136
153
|
# TODO: Allow an option to wait for active sessions to be returned before
|
137
154
|
# closing
|
138
155
|
def close
|
139
156
|
@pool.each do |s|
|
140
|
-
#@pool.remove(s)
|
141
157
|
s.close
|
142
|
-
#@pool.remove(s)
|
143
158
|
end
|
144
159
|
end
|
145
160
|
|
data/test/message_test.rb
CHANGED
@@ -31,7 +31,7 @@ class JMSTest < Test::Unit::TestCase
|
|
31
31
|
producer.send(session.message('Hello World'))
|
32
32
|
|
33
33
|
# Consume Message
|
34
|
-
session.consume(:destination => producer.destination) do |message|
|
34
|
+
session.consume(:destination => producer.destination, :timeout=>1000) do |message|
|
35
35
|
assert_equal message.java_kind_of?(JMS::TextMessage), true
|
36
36
|
data = message.data
|
37
37
|
end
|
@@ -44,7 +44,7 @@ class JMSTest < Test::Unit::TestCase
|
|
44
44
|
JMS::Connection.session(@config) do |session|
|
45
45
|
assert_not_nil session
|
46
46
|
data = :timed_out
|
47
|
-
browse_data =
|
47
|
+
browse_data = :timed_out
|
48
48
|
session.producer(:queue_name => @queue_name) do |producer|
|
49
49
|
# Send Message
|
50
50
|
producer.send(session.message('Hello World'))
|
@@ -56,7 +56,7 @@ class JMSTest < Test::Unit::TestCase
|
|
56
56
|
end
|
57
57
|
|
58
58
|
# Consume Message
|
59
|
-
session.consume(:queue_name => @queue_name) do |message|
|
59
|
+
session.consume(:queue_name => @queue_name, :timeout=>1000) do |message|
|
60
60
|
assert_equal message.java_kind_of?(JMS::TextMessage), true
|
61
61
|
data = message.data
|
62
62
|
end
|
@@ -91,7 +91,7 @@ class JMSTest < Test::Unit::TestCase
|
|
91
91
|
producer.send(message)
|
92
92
|
|
93
93
|
# Consume Message
|
94
|
-
session.consume(:destination => producer.destination) do |message|
|
94
|
+
session.consume(:destination => producer.destination, :timeout=>1000) do |message|
|
95
95
|
assert_equal message.java_kind_of?(JMS::TextMessage), true
|
96
96
|
data = message.data
|
97
97
|
#assert_equal :non_persistent, message.jms_delivery_mode
|
@@ -116,7 +116,7 @@ class JMSTest < Test::Unit::TestCase
|
|
116
116
|
producer.send(message)
|
117
117
|
|
118
118
|
# Consume Message
|
119
|
-
session.consume(:destination => producer.destination) do |message|
|
119
|
+
session.consume(:destination => producer.destination, :timeout=>1000) do |message|
|
120
120
|
assert_equal message.java_kind_of?(JMS::TextMessage), true
|
121
121
|
data = message.data
|
122
122
|
assert_equal :persistent, message.jms_delivery_mode_sym
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# Allow examples to be run in-place without requiring a gem install
|
2
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'shoulda'
|
7
|
+
require 'jms'
|
8
|
+
require 'yaml'
|
9
|
+
|
10
|
+
class JMSTest < Test::Unit::TestCase
|
11
|
+
context 'JMS Session' do
|
12
|
+
# Load configuration from jms.yml
|
13
|
+
setup do
|
14
|
+
# To change the JMS provider, edit jms.yml and change :default
|
15
|
+
|
16
|
+
# Load Connection parameters from configuration file
|
17
|
+
cfg = YAML.load_file(File.join(File.dirname(__FILE__), 'jms.yml'))
|
18
|
+
jms_provider = cfg['default']
|
19
|
+
@config = cfg[jms_provider]
|
20
|
+
raise "JMS Provider option:#{jms_provider} not found in jms.yml file" unless @config
|
21
|
+
@queue_name = @config.delete(:queue_name) || raise("Mandatory :queue_name missing from jms.yml")
|
22
|
+
@topic_name = @config.delete(:topic_name) || raise("Mandatory :topic_name missing from jms.yml")
|
23
|
+
@pool_params = {
|
24
|
+
:pool_name => 'Test::JMS::SessionPool',
|
25
|
+
:pool_size => 10,
|
26
|
+
:pool_warn_timeout => 5.0,
|
27
|
+
#:pool_logger =>
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
should 'create a session pool' do
|
32
|
+
JMS::Connection.start(@config) do |connection|
|
33
|
+
pool = connection.create_session_pool(@pool_params)
|
34
|
+
pool.session do |session|
|
35
|
+
assert_not_nil session
|
36
|
+
assert session.is_a?(javax.jms.Session)
|
37
|
+
end
|
38
|
+
pool.close
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
should 'remove bad session from pool' do
|
43
|
+
JMS::Connection.start(@config) do |connection|
|
44
|
+
pool = connection.create_session_pool(@pool_params.merge(:pool_size=>1))
|
45
|
+
s = nil
|
46
|
+
r = begin
|
47
|
+
pool.session do |session|
|
48
|
+
assert_not_nil session
|
49
|
+
assert session.is_a?(javax.jms.Session)
|
50
|
+
s = session
|
51
|
+
s.close
|
52
|
+
s.create_map_message
|
53
|
+
false
|
54
|
+
end
|
55
|
+
rescue javax.jms.IllegalStateException
|
56
|
+
true
|
57
|
+
end
|
58
|
+
assert r == true
|
59
|
+
|
60
|
+
# Now verify that the previous closed session was removed from the pool
|
61
|
+
pool.session do |session|
|
62
|
+
assert_not_nil session
|
63
|
+
assert session.is_a?(javax.jms.Session)
|
64
|
+
assert s != session
|
65
|
+
session.create_map_message
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
should 'allow multiple sessions to be used concurrently' do
|
71
|
+
JMS::Connection.start(@config) do |connection|
|
72
|
+
pool = connection.create_session_pool(@pool_params)
|
73
|
+
pool.session do |session|
|
74
|
+
assert_not_nil session
|
75
|
+
assert session.is_a?(javax.jms.Session)
|
76
|
+
pool.session do |session2|
|
77
|
+
assert_not_nil session2
|
78
|
+
assert session2.is_a?(javax.jms.Session)
|
79
|
+
assert session != session2
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: jruby-jms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.11.
|
5
|
+
version: 0.11.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Reid Morrison
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-05-25 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- test/connection_test.rb
|
93
93
|
- test/jms.yml
|
94
94
|
- test/message_test.rb
|
95
|
+
- test/session_pool_test.rb
|
95
96
|
- test/session_test.rb
|
96
97
|
has_rdoc: true
|
97
98
|
homepage: https://github.com/reidmorrison/jruby-jms
|