jruby-jms 1.1.0-java → 1.2.0-java

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +24 -7
  3. data/README.md +49 -49
  4. data/Rakefile +17 -12
  5. data/lib/jms.rb +8 -17
  6. data/lib/jms/bytes_message.rb +3 -19
  7. data/lib/jms/connection.rb +63 -83
  8. data/lib/jms/map_message.rb +9 -25
  9. data/lib/jms/message.rb +22 -173
  10. data/lib/jms/message_consumer.rb +23 -35
  11. data/lib/jms/message_listener_impl.rb +22 -38
  12. data/lib/jms/message_producer.rb +9 -25
  13. data/lib/jms/mq_workaround.rb +11 -26
  14. data/lib/jms/object_message.rb +1 -17
  15. data/lib/jms/oracle_a_q_connection_factory.rb +4 -21
  16. data/lib/jms/queue_browser.rb +2 -18
  17. data/lib/jms/session.rb +92 -106
  18. data/lib/jms/session_pool.rb +34 -41
  19. data/lib/jms/text_message.rb +0 -16
  20. data/lib/jms/version.rb +1 -1
  21. data/test/connection_test.rb +35 -81
  22. data/test/jms.yml +18 -8
  23. data/test/message_test.rb +27 -43
  24. data/test/session_pool_test.rb +30 -46
  25. data/test/session_test.rb +30 -45
  26. data/test/test_helper.rb +33 -0
  27. metadata +20 -26
  28. data/Gemfile +0 -8
  29. data/Gemfile.lock +0 -36
  30. data/examples/advanced/session_pool.rb +0 -37
  31. data/examples/client-server/replier.rb +0 -29
  32. data/examples/client-server/requestor.rb +0 -40
  33. data/examples/file-to-q/files_to_q.rb +0 -51
  34. data/examples/file-to-q/q_to_files.rb +0 -44
  35. data/examples/invm/invm.rb +0 -44
  36. data/examples/invm/log4j.properties +0 -58
  37. data/examples/jms.yml +0 -149
  38. data/examples/performance/consumer.rb +0 -25
  39. data/examples/performance/producer.rb +0 -31
  40. data/examples/producer-consumer/browser.rb +0 -24
  41. data/examples/producer-consumer/consumer.rb +0 -24
  42. data/examples/producer-consumer/consumer_async.rb +0 -41
  43. data/examples/producer-consumer/producer.rb +0 -25
  44. data/examples/publish-subscribe/publish.rb +0 -24
  45. data/examples/publish-subscribe/subscribe.rb +0 -31
  46. data/lib/jms/logging.rb +0 -50
  47. data/nbproject/private/private.properties +0 -3
  48. data/nbproject/private/rake-d.txt +0 -5
  49. data/parallel_minion.gemspec +0 -21
@@ -1,20 +1,4 @@
1
- ################################################################################
2
- # Copyright 2008, 2009, 2010, 2011 J. Reid Morrison
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- ################################################################################
16
-
17
- #Interface javax.jms.MapMessage
1
+ # Interface javax.jms.MapMessage
18
2
  module JMS::MapMessage
19
3
  # Since each is defined, add support for: inject, map, include?, and find_all?
20
4
  # <=> also allows support for: min, max, and sort
@@ -23,7 +7,7 @@ module JMS::MapMessage
23
7
  # Return Map Message as a hash
24
8
  def to_h
25
9
  h = {}
26
- each_pair {|key, value| h[key] = value}
10
+ each_pair { |key, value| h[key] = value }
27
11
  h
28
12
  end
29
13
 
@@ -42,20 +26,20 @@ module JMS::MapMessage
42
26
  # nil => null
43
27
  # Otherwise it calls ::to_s on the supplied data type
44
28
  def data=(data)
45
- data.each_pair do |key,val|
29
+ data.each_pair do |key, val|
46
30
  case
47
31
  when val.class == Fixnum # 1
48
- setLong(key.to_s,val)
32
+ setLong(key.to_s, val)
49
33
  when val.class == Float #1.1
50
- setDouble(key.to_s,val)
34
+ setDouble(key.to_s, val)
51
35
  when val.class == Bignum # 11111111111111111
52
- setLong(key.to_s,val)
36
+ setLong(key.to_s, val)
53
37
  when (val.class == TrueClass) || (val.class == FalseClass)
54
- setBoolean(key.to_s,val)
38
+ setBoolean(key.to_s, val)
55
39
  when val.class == NilClass
56
- setObject(key.to_s,val)
40
+ setObject(key.to_s, val)
57
41
  else
58
- setString(key.to_s,val.to_s)
42
+ setString(key.to_s, val.to_s)
59
43
  end
60
44
  end
61
45
  end
data/lib/jms/message.rb CHANGED
@@ -1,19 +1,3 @@
1
- ################################################################################
2
- # Copyright 2008, 2009, 2010, 2011 J. Reid Morrison
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- ################################################################################
16
-
17
1
  # Extend JMS Message Interface with Ruby methods
18
2
  #
19
3
  # A Message is the item that can be put on a queue, or obtained from a queue.
@@ -54,142 +38,6 @@ module JMS::Message
54
38
  # Clears out the properties of this message
55
39
  #
56
40
 
57
- # For Backward compatibility with JRuby prior to 1.6
58
- # JRuby 1.6 now does all this for us. Thank you headius :)
59
- unless self.instance_methods.include? :jms_delivery_mode
60
-
61
- # Header Fields - Attributes of the message
62
-
63
- # Returns the JMS Delivery Mode
64
- # One of the following will be returned
65
- # JMS::DeliveryMode::PERSISTENT
66
- # JMS::DeliveryMode::NON_PERSISTENT
67
- def jms_delivery_mode
68
- getJMSDeliveryMode
69
- end
70
-
71
- # Set the JMS Delivery Mode
72
- # Values can be
73
- # JMS::DeliveryMode::PERSISTENT
74
- # JMS::DeliveryMode::NON_PERSISTENT
75
- def jms_delivery_mode=(mode)
76
- raise "Sorry, due to incompatibility with JRuby 1.6, please call jms_delivery_mode_sym when using symbols" if mode.is_a? Symbol
77
- self.setJMSDeliveryMode(mode)
78
- end
79
-
80
- # Is the message persistent?
81
- def persistent?
82
- getJMSDeliveryMode == JMS::DeliveryMode::PERSISTENT
83
- end
84
-
85
- # Returns the Message correlation ID as a String
86
- # The resulting string may contain nulls
87
- def jms_correlation_id
88
- String.from_java_bytes(getJMSCorrelationIDAsBytes) if getJMSCorrelationIDAsBytes
89
- end
90
-
91
- # Set the Message correlation ID
92
- # correlation_id: String
93
- # Also supports embedded nulls within the correlation id
94
- def jms_correlation_id=(correlation_id)
95
- setJMSCorrelationIDAsBytes(correlation_id.nil? ? nil : correlation_id.to_java_bytes)
96
- end
97
-
98
- # Returns the Message Destination
99
- # Instance of JMS::Destination
100
- def jms_destination
101
- getJMSDestination
102
- end
103
-
104
- # Set the Message Destination
105
- # jms_destination: Must be an instance of JMS::Destination
106
- def jms_destination=(destination)
107
- setJMSDestination(destination)
108
- end
109
-
110
- # Return the message expiration value as an Integer
111
- def jms_expiration
112
- getJMSExpiration
113
- end
114
-
115
- # Set the Message expiration value
116
- # expiration: Integer
117
- def jms_expiration=(expiration)
118
- setJMSExpiration(expiration)
119
- end
120
-
121
- # Returns the Message ID as a String
122
- # The resulting string may contain embedded nulls
123
- def jms_message_id
124
- getJMSMessageID
125
- end
126
-
127
- # Set the Message correlation ID
128
- # message_id: String
129
- # Also supports nulls within the message id
130
- def jms_message_id=(message_id)
131
- setJMSMessageID(message_id)
132
- end
133
-
134
- # Returns the Message Priority level as an Integer
135
- def jms_priority
136
- getJMSPriority
137
- end
138
-
139
- # Set the Message priority level
140
- # priority: Integer
141
- def jms_priority=(priority)
142
- setJMSPriority(priority)
143
- end
144
-
145
- # Indicates whether the Message was redelivered?
146
- def jms_redelivered?
147
- getJMSRedelivered
148
- end
149
-
150
- # Set whether the Message was redelivered
151
- # bool: Boolean
152
- def jms_redelivered=(bool)
153
- setJMSPriority(bool)
154
- end
155
-
156
- # Returns the Message reply to Destination
157
- # Instance of JMS::Destination
158
- def jms_reply_to
159
- getJMSReplyTo
160
- end
161
-
162
- # Set the Message reply to Destination
163
- # reply_to: Must be an instance of JMS::Destination
164
- def jms_reply_to=(reply_to)
165
- setJMSReplyTo(reply_to)
166
- end
167
-
168
- # Returns the Message timestamp as Java Timestamp Integer
169
- #TODO Return Ruby Time object?
170
- def jms_timestamp
171
- getJMSTimestamp
172
- end
173
-
174
- # Set the Message timestamp as Java Timestamp Integer
175
- # timestamp: Must be an Java Timestamp Integer
176
- #TODO Support Ruby Time
177
- def jms_timestamp=(timestamp)
178
- setJMSTimestamp(timestamp)
179
- end
180
-
181
- # Returns the Message type supplied by the client when the message was sent
182
- def jms_type
183
- getJMSType
184
- end
185
-
186
- # Sets the Message type
187
- # type: String
188
- def jms_type=(type)
189
- setJMSType(type)
190
- end
191
- end
192
-
193
41
  # Return the JMS Delivery Mode as a Ruby symbol
194
42
  # :persistent
195
43
  # :non_persistent
@@ -210,30 +58,31 @@ module JMS::Message
210
58
  # :persistent
211
59
  # :non_persistent
212
60
  def jms_delivery_mode_sym=(mode)
213
- val = case mode
214
- when :persistent
215
- JMS::DeliveryMode::PERSISTENT
216
- when :non_persistent
217
- JMS::DeliveryMode::NON_PERSISTENT
218
- else
219
- raise "Unknown delivery mode symbol: #{mode}"
220
- end
61
+ val =
62
+ case mode
63
+ when :persistent
64
+ JMS::DeliveryMode::PERSISTENT
65
+ when :non_persistent
66
+ JMS::DeliveryMode::NON_PERSISTENT
67
+ else
68
+ raise "Unknown delivery mode symbol: #{mode}"
69
+ end
221
70
  self.setJMSDeliveryMode(val)
222
71
  end
223
72
 
224
73
  # Return the attributes (header fields) of the message as a Hash
225
74
  def attributes
226
75
  {
227
- :jms_correlation_id => jms_correlation_id,
228
- :jms_delivery_mode_sym => jms_delivery_mode_sym,
229
- :jms_destination => jms_destination.nil? ? nil : jms_destination.to_string,
230
- :jms_expiration => jms_expiration,
231
- :jms_message_id => jms_message_id,
232
- :jms_priority => jms_priority,
233
- :jms_redelivered => jms_redelivered?,
234
- :jms_reply_to => jms_reply_to,
235
- :jms_timestamp => jms_timestamp,
236
- :jms_type => jms_type,
76
+ jms_correlation_id: jms_correlation_id,
77
+ jms_delivery_mode_sym: jms_delivery_mode_sym,
78
+ jms_destination: jms_destination.nil? ? nil : jms_destination.to_string,
79
+ jms_expiration: jms_expiration,
80
+ jms_message_id: jms_message_id,
81
+ jms_priority: jms_priority,
82
+ jms_redelivered: jms_redelivered?,
83
+ jms_reply_to: jms_reply_to,
84
+ jms_timestamp: jms_timestamp,
85
+ jms_type: jms_type,
237
86
  }
238
87
  end
239
88
 
@@ -258,14 +107,14 @@ module JMS::Message
258
107
  # Return Properties as a hash
259
108
  def properties
260
109
  h = {}
261
- properties_each_pair {|k,v| h[k]=v}
110
+ properties_each_pair { |k, v| h[k]=v }
262
111
  h
263
112
  end
264
113
 
265
114
  # Set Properties from an existing hash
266
115
  def properties=(h)
267
116
  clear_properties
268
- h.each_pair {|k,v| setObjectProperty(k.to_s, v)}
117
+ h.each_pair { |k, v| setObjectProperty(k.to_s, v) }
269
118
  h
270
119
  end
271
120
 
@@ -282,4 +131,4 @@ module JMS::Message
282
131
  "#{self.class.name}: #{data}\nAttributes: #{attributes.inspect}\nProperties: #{properties.inspect}"
283
132
  end
284
133
 
285
- end
134
+ end
@@ -1,19 +1,3 @@
1
- ################################################################################
2
- # Copyright 2008, 2009, 2010, 2011 J. Reid Morrison
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- ################################################################################
16
-
17
1
  # Interface javax.jms.MessageConsumer
18
2
  module JMS::MessageConsumer
19
3
  # Obtain a message from the Destination or Topic
@@ -36,8 +20,8 @@ module JMS::MessageConsumer
36
20
  end
37
21
  end
38
22
 
39
- # For each message available to be consumed call the Proc supplied
40
- # Returns the statistics gathered when :statistics => true, otherwise nil
23
+ # For each message available to be consumed call the supplied block
24
+ # Returns the statistics gathered when statistics: true, otherwise nil
41
25
  #
42
26
  # Parameters:
43
27
  # :timeout How to timeout waiting for messages on the Queue or Topic
@@ -52,32 +36,33 @@ module JMS::MessageConsumer
52
36
  # true : This method will capture statistics on the number of messages received
53
37
  # and the time it took to process them.
54
38
  # The statistics can be reset by calling MessageConsumer::each again
55
- # with :statistics => true
39
+ # with statistics: true
56
40
  #
57
- # The statistics gathered are returned when :statistics => true and :async => false
58
- def each(params={}, &proc)
59
- raise "Destination::each requires a code block to be executed for each message received" unless proc
41
+ # The statistics gathered are returned when statistics: true and async: false
42
+ def each(params={}, &block)
43
+ raise(ArgumentError, 'Destination::each requires a code block to be executed for each message received') unless block
60
44
 
61
45
  message_count = nil
62
- start_time = nil
46
+ start_time = nil
63
47
 
64
48
  if params[:statistics]
65
49
  message_count = 0
66
- start_time = Time.now
50
+ start_time = Time.now
67
51
  end
68
52
 
69
53
  # Receive messages according to timeout
70
54
  while message = self.get(params) do
71
- proc.call(message)
55
+ block.call(message)
72
56
  message_count += 1 if message_count
73
57
  end
74
58
 
75
59
  unless message_count.nil?
76
60
  duration = Time.now - start_time
77
- {:messages => message_count,
78
- :duration => duration,
79
- :messages_per_second => duration > 0 ? (message_count/duration).to_i : 0,
80
- :ms_per_msg => message_count > 0 ? (duration*1000.0)/message_count : 0
61
+ {
62
+ messages: message_count,
63
+ duration: duration,
64
+ messages_per_second: duration > 0 ? (message_count/duration).to_i : 0,
65
+ ms_per_msg: message_count > 0 ? (duration*1000.0)/message_count : 0
81
66
  }
82
67
  end
83
68
  end
@@ -96,21 +81,24 @@ module JMS::MessageConsumer
96
81
  # or when Destination::statistics is called. In this case MessageConsumer::statistics
97
82
  # can be called several times during processing without affecting the end time.
98
83
  # Also, the start time and message count is not reset until MessageConsumer::each
99
- # is called again with :statistics => true
84
+ # is called again with statistics: true
100
85
  #
101
- # The statistics gathered are returned when :statistics => true and :async => false
86
+ # The statistics gathered are returned when statistics: true and async: false
102
87
  #
103
88
  def on_message(params={}, &proc)
104
- raise "MessageConsumer::on_message requires a code block to be executed for each message received" unless proc
89
+ raise(ArgumentError, 'MessageConsumer::on_message requires a code block to be executed for each message received') unless proc
90
+
91
+ # Turn on Java class persistence: https://github.com/jruby/jruby/wiki/Persistence
92
+ self.class.__persistent__ = true
105
93
 
106
- @listener = JMS::MessageListenerImpl.new(params,&proc)
107
- self.setMessageListener @listener
94
+ @listener = JMS::MessageListenerImpl.new(params, &proc)
95
+ self.setMessageListener(@listener)
108
96
  end
109
97
 
110
98
  # Return the current statistics for a running MessageConsumer::on_message
111
99
  def on_message_statistics
112
100
  stats = @listener.statistics if @listener
113
- raise "First call MessageConsumer::on_message with :statistics=>true before calling MessageConsumer::statistics()" unless stats
101
+ raise(ArgumentError, 'First call MessageConsumer::on_message with statistics: true before calling MessageConsumer::statistics()') unless stats
114
102
  stats
115
103
  end
116
104
 
@@ -1,25 +1,11 @@
1
- ################################################################################
2
- # Copyright 2008, 2009, 2010, 2011 J. Reid Morrison
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- ################################################################################
16
-
17
1
  module JMS
18
2
 
19
3
  private
4
+
20
5
  # For internal use only by JMS::Connection
21
6
  class MessageListenerImpl
22
7
  include JMS::MessageListener
8
+ include SemanticLogger::Loggable
23
9
 
24
10
  # Parameters:
25
11
  # :statistics Capture statistics on how many messages have been read
@@ -29,15 +15,15 @@ module JMS
29
15
  # or when Destination::statistics is called. In this case MessageConsumer::statistics
30
16
  # can be called several times during processing without affecting the end time.
31
17
  # Also, the start time and message count is not reset until MessageConsumer::each
32
- # is called again with :statistics => true
18
+ # is called again with statistics: true
33
19
  #
34
- # The statistics gathered are returned when :statistics => true and :async => false
20
+ # The statistics gathered are returned when statistics: true and async: false
35
21
  def initialize(params={}, &proc)
36
22
  @proc = proc
37
23
 
38
24
  if params[:statistics]
39
25
  @message_count = 0
40
- @start_time = Time.now
26
+ @start_time = Time.now
41
27
  end
42
28
  end
43
29
 
@@ -49,31 +35,29 @@ module JMS
49
35
  begin
50
36
  if @message_count
51
37
  @message_count += 1
52
- @last_time = Time.now
38
+ @last_time = Time.now
39
+ end
40
+ logger.benchmark_debug('Message processed') do
41
+ @proc.call message
53
42
  end
54
- @proc.call message
55
- rescue SyntaxError, NameError => boom
56
- JMS::logger.error "Unhandled Exception processing JMS Message. Doesn't compile: " + boom
57
- JMS::logger.error "Ignoring poison message:\n#{message.inspect}"
58
- JMS::logger.error boom.backtrace.join("\n")
59
- rescue StandardError => bang
60
- JMS::logger.error "Unhandled Exception processing JMS Message. Doesn't compile: " + bang
61
- JMS::logger.error "Ignoring poison message:\n#{message.inspect}"
62
- JMS::logger.error bang.backtrace.join("\n")
63
- rescue => exc
64
- JMS::logger.error "Unhandled Exception processing JMS Message. Exception occurred:\n#{exc}"
65
- JMS::logger.error "Ignoring poison message:\n#{message.inspect}"
66
- JMS::logger.error exc.backtrace.join("\n")
43
+ rescue SyntaxError, NameError => exc
44
+ logger.error "Ignoring poison message:\n#{message.inspect}", exc
45
+ rescue StandardError => exc
46
+ logger.error "Ignoring poison message:\n#{message.inspect}", exc
47
+ rescue Exception => exc
48
+ logger.error "Ignoring poison message:\n#{message.inspect}", exc
67
49
  end
68
50
  end
69
51
 
70
52
  # Return Statistics gathered for this listener
71
53
  def statistics
72
- raise "First call MessageConsumer::on_message with :statistics=>true before calling MessageConsumer::statistics()" unless @message_count
73
- duration =(@last_time || Time.now) - @start_time
74
- {:messages => @message_count,
75
- :duration => duration,
76
- :messages_per_second => (@message_count/duration).to_i}
54
+ raise(ArgumentError, 'First call MessageConsumer::on_message with statistics: true before calling MessageConsumer::statistics()') unless @message_count
55
+ duration = (@last_time || Time.now) - @start_time
56
+ {
57
+ messages: @message_count,
58
+ duration: duration,
59
+ messages_per_second: (@message_count/duration).to_i
60
+ }
77
61
  end
78
62
  end
79
63
  end