Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'base64'
- class Java::org.torquebox.messaging.client::Client
- alias_method :core_send, :send
- def receive(destination, opts = {})
- timeout = opts[:timeout] || 30000 # 30 sec
- type = opts[:type] || :raw
- filter = opts[:filter]
- message_for_type( session.create_receiver( self.lookup( destination ), filter ).receive( timeout ), type )
- end
- def send(destination, opts = {})
- message = prepare_message( opts )
- return if message.nil?
- producer = session.create_producer( self.lookup( destination ) )
- producer.send( message )
- end
- def send_and_receive(destination, opts = {})
- type = opts[:type] || :raw
- message = prepare_message( opts )
- return if message.nil?
- message_for_type( Java::javax.jms.QueueRequestor.new( session, self.lookup( destination ) ).request( message ), type )
- end
- def message_for_type( message, type )
- return if message.nil?
- case type
- when :text
- return message.text
- when :object
- return message.object
- else
- return message
- end
- end
- def prepare_message(opts = {})
- message = nil
- if ( ( ! opts[:task].nil? ) && ( ! opts[:payload].nil? ) )
- message = session.create_text_message
- message.set_string_property( 'torqueboxMessageType', 'task' )
- message.set_string_property( 'torqueboxTask', opts[:task] )
- marshalled = Marshal.dump( opts[:payload] )
- encoded = Base64.encode64( marshalled )
- message.text = encoded
- elsif ( ! opts[:object].nil? )
- message = session.create_text_message
- message.set_string_property( 'torqueboxMessageType', 'object' )
- marshalled = Marshal.dump( opts[:object] )
- encoded = Base64.encode64( marshalled )
- message.text = encoded
- elsif ( ! opts[:text].nil? )
- message = session.create_text_message
- message.set_string_property( 'torqueboxMessageType', 'text' )
- message.text = opts[:text].to_s
- end
- unless message.nil?
- opts[:properties].each do |key, value|
- key = key.to_s
- case value
- when String
- message.set_string_property( key, value )
- when Fixnum
- message.set_int_property( key, value )
- when Bignum
- message.set_long_property( key, value )
- when FalseClass, TrueClass
- message.set_boolean_property( key, value )
- when Float
- message.set_double_property( key, value )
- else
- message.set_object_property( key, value )
- end
- end unless opts[:properties].nil? or !opts[:properties].is_a?(Hash)
- end
- message
- end
- end
- module TorqueBox
- module Messaging
- class Client
- def self.connect(opts={},&block)
- factory = Java::org.torquebox.messaging.client::ClientFactory.new
- factory.naming_provider_url = opts[:naming_provider_url] unless ( opts[:naming_provider_url].nil? )
- factory.context_factory_class_name = opts[:context_factory_class_name] unless ( opts[:context_factory_class_name].nil? )
- factory.url_package_prefixes = opts[:url_package_prefixes] unless ( opts[:url_package_prefixes].nil? )
- factory.connection_factory_jndi_name = opts[:connection_factory_jndi_name] unless ( opts[:connection_factory_jndi_name].nil? )
- client = factory.create_client
- client.connect
- if ( block )
- begin
- block.call( client )
- client.commit
- rescue => e
- client.rollback
- raise e
- ensure
- client.close
- end
- else
- return client
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment