Guest User

Untitled

a guest
May 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 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. message_for_type( session.create_receiver( self.lookup( destination ), filter ).receive( timeout ), type )
  13. end
  14.  
  15. def send(destination, opts = {})
  16. message = prepare_message( opts )
  17. return if message.nil?
  18.  
  19. producer = session.create_producer( self.lookup( destination ) )
  20. producer.send( message )
  21. end
  22.  
  23. def send_and_receive(destination, opts = {})
  24. type = opts[:type] || :raw
  25.  
  26. message = prepare_message( opts )
  27. return if message.nil?
  28.  
  29. message_for_type( Java::javax.jms.QueueRequestor.new( session, self.lookup( destination ) ).request( message ), type )
  30. end
  31.  
  32. def message_for_type( message, type )
  33. return if message.nil?
  34.  
  35. case type
  36. when :text
  37. return message.text
  38. when :object
  39. return message.object
  40. else
  41. return message
  42. end
  43. end
  44.  
  45. def prepare_message(opts = {})
  46. message = nil
  47. if ( ( ! opts[:task].nil? ) && ( ! opts[:payload].nil? ) )
  48. message = session.create_text_message
  49. message.set_string_property( 'torqueboxMessageType', 'task' )
  50. message.set_string_property( 'torqueboxTask', opts[:task] )
  51. marshalled = Marshal.dump( opts[:payload] )
  52. encoded = Base64.encode64( marshalled )
  53. message.text = encoded
  54. elsif ( ! opts[:object].nil? )
  55. message = session.create_text_message
  56. message.set_string_property( 'torqueboxMessageType', 'object' )
  57. marshalled = Marshal.dump( opts[:object] )
  58. encoded = Base64.encode64( marshalled )
  59. message.text = encoded
  60. elsif ( ! opts[:text].nil? )
  61. message = session.create_text_message
  62. message.set_string_property( 'torqueboxMessageType', 'text' )
  63. message.text = opts[:text].to_s
  64. end
  65.  
  66. unless message.nil?
  67. opts[:properties].each do |key, value|
  68. key = key.to_s
  69. case value
  70. when String
  71. message.set_string_property( key, value )
  72. when Fixnum
  73. message.set_int_property( key, value )
  74. when Bignum
  75. message.set_long_property( key, value )
  76. when FalseClass, TrueClass
  77. message.set_boolean_property( key, value )
  78. when Float
  79. message.set_double_property( key, value )
  80. else
  81. message.set_object_property( key, value )
  82. end
  83. end unless opts[:properties].nil? or !opts[:properties].is_a?(Hash)
  84. end
  85.  
  86. message
  87. end
  88. end
  89.  
  90. module TorqueBox
  91. module Messaging
  92.  
  93. class Client
  94. def self.connect(opts={},&block)
  95. factory = Java::org.torquebox.messaging.client::ClientFactory.new
  96. factory.naming_provider_url = opts[:naming_provider_url] unless ( opts[:naming_provider_url].nil? )
  97. factory.context_factory_class_name = opts[:context_factory_class_name] unless ( opts[:context_factory_class_name].nil? )
  98. factory.url_package_prefixes = opts[:url_package_prefixes] unless ( opts[:url_package_prefixes].nil? )
  99. factory.connection_factory_jndi_name = opts[:connection_factory_jndi_name] unless ( opts[:connection_factory_jndi_name].nil? )
  100. client = factory.create_client
  101. client.connect
  102. if ( block )
  103. begin
  104. block.call( client )
  105. client.commit
  106. rescue => e
  107. client.rollback
  108. raise e
  109. ensure
  110. client.close
  111. end
  112. else
  113. return client
  114. end
  115. end
  116.  
  117. end
  118.  
  119. end
  120. end
Add Comment
Please, Sign In to add comment