jruby-jms 1.1.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 (51) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +8 -0
  3. data/Gemfile.lock +36 -0
  4. data/HISTORY.md +52 -0
  5. data/LICENSE.txt +201 -0
  6. data/README.md +205 -0
  7. data/Rakefile +30 -0
  8. data/examples/advanced/session_pool.rb +37 -0
  9. data/examples/client-server/replier.rb +29 -0
  10. data/examples/client-server/requestor.rb +40 -0
  11. data/examples/file-to-q/files_to_q.rb +51 -0
  12. data/examples/file-to-q/q_to_files.rb +44 -0
  13. data/examples/invm/invm.rb +44 -0
  14. data/examples/invm/log4j.properties +58 -0
  15. data/examples/jms.yml +149 -0
  16. data/examples/performance/consumer.rb +25 -0
  17. data/examples/performance/producer.rb +31 -0
  18. data/examples/producer-consumer/browser.rb +24 -0
  19. data/examples/producer-consumer/consumer.rb +24 -0
  20. data/examples/producer-consumer/consumer_async.rb +41 -0
  21. data/examples/producer-consumer/producer.rb +25 -0
  22. data/examples/publish-subscribe/publish.rb +24 -0
  23. data/examples/publish-subscribe/subscribe.rb +31 -0
  24. data/lib/jms.rb +20 -0
  25. data/lib/jms/bytes_message.rb +52 -0
  26. data/lib/jms/connection.rb +529 -0
  27. data/lib/jms/imports.rb +21 -0
  28. data/lib/jms/logging.rb +50 -0
  29. data/lib/jms/map_message.rb +91 -0
  30. data/lib/jms/message.rb +285 -0
  31. data/lib/jms/message_consumer.rb +117 -0
  32. data/lib/jms/message_listener_impl.rb +79 -0
  33. data/lib/jms/message_producer.rb +59 -0
  34. data/lib/jms/mq_workaround.rb +70 -0
  35. data/lib/jms/object_message.rb +26 -0
  36. data/lib/jms/oracle_a_q_connection_factory.rb +48 -0
  37. data/lib/jms/queue_browser.rb +28 -0
  38. data/lib/jms/session.rb +473 -0
  39. data/lib/jms/session_pool.rb +168 -0
  40. data/lib/jms/text_message.rb +31 -0
  41. data/lib/jms/version.rb +3 -0
  42. data/nbproject/private/private.properties +3 -0
  43. data/nbproject/private/rake-d.txt +5 -0
  44. data/parallel_minion.gemspec +21 -0
  45. data/test/connection_test.rb +160 -0
  46. data/test/jms.yml +111 -0
  47. data/test/log4j.properties +32 -0
  48. data/test/message_test.rb +130 -0
  49. data/test/session_pool_test.rb +86 -0
  50. data/test/session_test.rb +140 -0
  51. metadata +113 -0
@@ -0,0 +1,21 @@
1
+ # Import Java classes into JMS Namespace
2
+ module JMS
3
+ java_import 'javax.jms.DeliveryMode'
4
+ java_import 'javax.jms.Message'
5
+ java_import 'javax.jms.BytesMessage'
6
+ java_import 'javax.jms.TextMessage'
7
+ java_import 'javax.jms.MapMessage'
8
+ java_import 'javax.jms.ObjectMessage'
9
+ java_import 'javax.jms.StreamMessage'
10
+ java_import 'javax.jms.Session'
11
+ java_import 'javax.jms.Destination'
12
+ java_import 'javax.jms.Queue'
13
+ java_import 'javax.jms.Topic'
14
+ java_import 'javax.jms.TemporaryQueue'
15
+ java_import 'javax.jms.TemporaryTopic'
16
+ java_import 'javax.jms.MessageConsumer'
17
+ java_import 'javax.jms.MessageProducer'
18
+ java_import 'javax.jms.QueueBrowser'
19
+ java_import 'javax.jms.MessageListener'
20
+ java_import 'javax.jms.ExceptionListener'
21
+ end
@@ -0,0 +1,50 @@
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
+ # Add Logging capabilities
18
+ module JMS
19
+
20
+ # Returns the logger being used by jruby-jms
21
+ # Unless previously set, it will try to use the Rails logger and if it
22
+ # is not present, it will return a new Ruby logger
23
+ def self.logger
24
+ @logger ||= (self.rails_logger || self.ruby_logger)
25
+ end
26
+
27
+ # Replace the logger for jruby-jms
28
+ def self.logger=(logger)
29
+ @logger = logger
30
+ end
31
+
32
+ # Use the ruby logger, but add needed trace level logging which will result
33
+ # in debug log entries
34
+ def self.ruby_logger(level=nil, target=STDOUT)
35
+ require 'logger'
36
+
37
+ l = ::Logger.new(target)
38
+ l.instance_eval "alias :trace :debug"
39
+ l.instance_eval "alias :trace? :debug?"
40
+ l.level = level || ::Logger::INFO
41
+ l
42
+ end
43
+
44
+ private
45
+ def self.rails_logger
46
+ (defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger) ||
47
+ (defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER.respond_to?(:debug) && RAILS_DEFAULT_LOGGER)
48
+ end
49
+
50
+ end
@@ -0,0 +1,91 @@
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
18
+ module JMS::MapMessage
19
+ # Since each is defined, add support for: inject, map, include?, and find_all?
20
+ # <=> also allows support for: min, max, and sort
21
+ include Enumerable
22
+
23
+ # Return Map Message as a hash
24
+ def to_h
25
+ h = {}
26
+ each_pair {|key, value| h[key] = value}
27
+ h
28
+ end
29
+
30
+ # Return Map Message as a hash
31
+ def data
32
+ to_h
33
+ end
34
+
35
+ # Copy values from supplied hash into this MapMessage
36
+ # Converts Ruby types to Java native Data types as follows:
37
+ # Fixnum => long
38
+ # Float => double
39
+ # Bignum => long
40
+ # true => boolean
41
+ # false => boolean
42
+ # nil => null
43
+ # Otherwise it calls ::to_s on the supplied data type
44
+ def data=(data)
45
+ data.each_pair do |key,val|
46
+ case
47
+ when val.class == Fixnum # 1
48
+ setLong(key.to_s,val)
49
+ when val.class == Float #1.1
50
+ setDouble(key.to_s,val)
51
+ when val.class == Bignum # 11111111111111111
52
+ setLong(key.to_s,val)
53
+ when (val.class == TrueClass) || (val.class == FalseClass)
54
+ setBoolean(key.to_s,val)
55
+ when val.class == NilClass
56
+ setObject(key.to_s,val)
57
+ else
58
+ setString(key.to_s,val.to_s)
59
+ end
60
+ end
61
+ end
62
+
63
+ # Return each name value pair
64
+ def each(&proc)
65
+ # When key and value are expected separately. Should actually be calling each_pair anyway
66
+ if proc.arity == 2
67
+ each_pair(proc)
68
+ else
69
+ enum = getMapNames
70
+ while enum.has_more_elements
71
+ key = enum.next_element
72
+ proc.call [key, getObject(key)]
73
+ end
74
+ end
75
+ end
76
+
77
+ # Return each name value pair
78
+ def each_pair(&proc)
79
+ enum = getMapNames
80
+ while enum.has_more_elements
81
+ key = enum.next_element
82
+ proc.call key, getObject(key)
83
+ end
84
+ end
85
+
86
+ # Does map include specified key
87
+ def include?(key)
88
+ # Ensure a Ruby true is returned
89
+ item_exists(key) == true
90
+ end
91
+ end
@@ -0,0 +1,285 @@
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
+ # Extend JMS Message Interface with Ruby methods
18
+ #
19
+ # A Message is the item that can be put on a queue, or obtained from a queue.
20
+ #
21
+ # A Message consists of 3 major parts:
22
+ # - Header
23
+ # Accessible as attributes of the Message class
24
+ # - Properties
25
+ # Accessible via [] and []= methods
26
+ # - Data
27
+ # The actual data portion of the message
28
+ # See the specific message types for details on how to access the data
29
+ # portion of the message
30
+ #
31
+ # For further help on javax.jms.Message
32
+ # http://download.oracle.com/javaee/6/api/index.html?javax/jms/Message.html
33
+ #
34
+ # Interface javax.jms.Message
35
+ module JMS::Message
36
+
37
+ # Methods directly exposed from the Java class:
38
+
39
+ # call-seq:
40
+ # acknowledge
41
+ #
42
+ # Acknowledges all consumed messages of the session of this consumed message
43
+ #
44
+
45
+ # call-seq:
46
+ # clear_body
47
+ #
48
+ # Clears out the message body
49
+ #
50
+
51
+ # call-seq:
52
+ # clear_properties
53
+ #
54
+ # Clears out the properties of this message
55
+ #
56
+
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
+ # Return the JMS Delivery Mode as a Ruby symbol
194
+ # :persistent
195
+ # :non_persistent
196
+ # nil if unknown
197
+ def jms_delivery_mode_sym
198
+ case jms_delivery_mode
199
+ when JMS::DeliveryMode::PERSISTENT
200
+ :persistent
201
+ when JMS::DeliveryMode::NON_PERSISTENT
202
+ :non_persistent
203
+ else
204
+ nil
205
+ end
206
+ end
207
+
208
+ # Set the JMS Delivery Mode from a Ruby Symbol
209
+ # Valid values for mode
210
+ # :persistent
211
+ # :non_persistent
212
+ 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
221
+ self.setJMSDeliveryMode(val)
222
+ end
223
+
224
+ # Return the attributes (header fields) of the message as a Hash
225
+ def attributes
226
+ {
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,
237
+ }
238
+ end
239
+
240
+ # Methods for manipulating the message properties
241
+
242
+ # Get the value of a property
243
+ def [](key)
244
+ getObjectProperty key.to_s
245
+ end
246
+
247
+ # Set a property
248
+ def []=(key, value)
249
+ setObjectProperty(key.to_s, value)
250
+ end
251
+
252
+ # Does message include specified property?
253
+ def include?(key)
254
+ # Ensure a Ruby true is returned
255
+ property_exists(key) == true
256
+ end
257
+
258
+ # Return Properties as a hash
259
+ def properties
260
+ h = {}
261
+ properties_each_pair {|k,v| h[k]=v}
262
+ h
263
+ end
264
+
265
+ # Set Properties from an existing hash
266
+ def properties=(h)
267
+ clear_properties
268
+ h.each_pair {|k,v| setObjectProperty(k.to_s, v)}
269
+ h
270
+ end
271
+
272
+ # Return each name value pair
273
+ def properties_each_pair(&proc)
274
+ enum = getPropertyNames
275
+ while enum.has_more_elements
276
+ key = enum.next_element
277
+ proc.call key, getObjectProperty(key)
278
+ end
279
+ end
280
+
281
+ def inspect
282
+ "#{self.class.name}: #{data}\nAttributes: #{attributes.inspect}\nProperties: #{properties.inspect}"
283
+ end
284
+
285
+ end