Guest User

Untitled

a guest
May 24th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. require 'base64'
  2.  
  3. class Java::org.torquebox.messaging.client::Client
  4.  
  5. alias_method :core_send, :send
  6.  
  7. def receive(destination, opts = {})
  8. timeout = opts[:timeout] || 30000 # 30 sec
  9. type = opts[:type] || :raw
  10. filter = opts[:filter]
  11.  
  12. destination = lookup_destination( destination )
  13.  
  14. recvd_msg = session.create_receiver( destination, filter ).receive( timeout )
  15. session.commit
  16.  
  17. message_for_type( recvd_msg, type )
  18. end
  19.  
  20. def send(destination, opts = {})
  21. message = prepare_message( opts )
  22. return if message.nil?
  23.  
  24. destination = lookup_destination( destination )
  25.  
  26. producer = session.create_producer( destination )
  27. producer.send( message )
  28. session.commit
  29. end
  30.  
  31. def send_and_receive(destination, opts = {})
  32. message = prepare_message( opts )
  33. return if message.nil?
  34.  
  35. type = opts[:type] || :raw
  36. timeout = opts[:timeout] || 30000 # 30 sec
  37.  
  38. destination = lookup_destination( destination )
  39.  
  40. request_producer = session.create_producer( destination )
  41.  
  42. reply_queue = session.create_temporary_queue
  43. reply_receiver = session.create_receiver( reply_queue )
  44.  
  45. message.jmsreply_to = reply_queue
  46. message.jmsdelivery_mode = Java::javax.jms.DeliveryMode.NON_PERSISTENT
  47.  
  48. request_producer.send( message )
  49. session.commit
  50. recvd_msg = reply_receiver.receive( timeout )
  51. session.commit
  52.  
  53. message_for_type( recvd_msg, type )
  54. end
  55.  
  56. def lookup_destination( destination )
  57. destination.is_a?( Java::javax.jms.Destination ) ? destination : self.lookup( destination.to_s )
  58. end
  59.  
  60. def message_for_type( message, type )
  61. return if message.nil?
  62.  
  63. case type
  64. when :text
  65. return message.text
  66. when :object
  67. return message.object
  68. else
  69. return message
  70. end
  71. end
  72.  
  73. def prepare_message(opts = {})
  74. message = nil
  75. if ( ( ! opts[:task].nil? ) && ( ! opts[:payload].nil? ) )
  76. message = session.create_text_message
  77. message.set_string_property( 'torqueboxMessageType', 'task' )
  78. message.set_string_property( 'torqueboxTask', opts[:task] )
  79. marshalled = Marshal.dump( opts[:payload] )
  80. encoded = Base64.encode64( marshalled )
  81. message.text = encoded
  82. elsif ( ! opts[:object].nil? )
  83. message = session.create_text_message
  84. message.set_string_property( 'torqueboxMessageType', 'object' )
  85. marshalled = Marshal.dump( opts[:object] )
  86. encoded = Base64.encode64( marshalled )
  87. message.text = encoded
  88. elsif ( ! opts[:text].nil? )
  89. message = session.create_text_message
  90. message.set_string_property( 'torqueboxMessageType', 'text' )
  91. message.text = opts[:text].to_s
  92. end
  93.  
  94. unless message.nil?
  95. opts[:properties].each do |key, value|
  96. key = key.to_s
  97. case value
  98. when String
  99. message.set_string_property( key, value )
  100. when Fixnum
  101. message.set_int_property( key, value )
  102. when Bignum
  103. message.set_long_property( key, value )
  104. when FalseClass, TrueClass
  105. message.set_boolean_property( key, value )
  106. when Float
  107. message.set_double_property( key, value )
  108. else
  109. message.set_object_property( key, value )
  110. end
  111. end unless opts[:properties].nil? or !opts[:properties].is_a?(Hash)
  112. end
  113.  
  114. message
  115. end
  116. end
  117.  
  118. module TorqueBox
  119. module Messaging
  120.  
  121. class Client
  122. def self.connect(opts={},&block)
  123. factory = Java::org.torquebox.messaging.client::ClientFactory.new
  124. factory.naming_provider_url = opts[:naming_provider_url] unless ( opts[:naming_provider_url].nil? )
  125. factory.context_factory_class_name = opts[:context_factory_class_name] unless ( opts[:context_factory_class_name].nil? )
  126. factory.url_package_prefixes = opts[:url_package_prefixes] unless ( opts[:url_package_prefixes].nil? )
  127. factory.connection_factory_jndi_name = opts[:connection_factory_jndi_name] unless ( opts[:connection_factory_jndi_name].nil? )
  128. client = factory.create_client
  129. client.connect
  130. if ( block )
  131. begin
  132. block.call( client )
  133. client.commit
  134. rescue => e
  135. client.rollback
  136. raise e
  137. ensure
  138. client.close
  139. end
  140. else
  141. return client
  142. end
  143. end
  144.  
  145. end
  146.  
  147. end
  148. end
Add Comment
Please, Sign In to add comment