lib/messaging.rb in jsparrow-1.1.1 vs lib/messaging.rb in jsparrow-1.1.2

- old
+ new

@@ -1,8 +1,7 @@ # Classes Java usadas nesse arquivo import 'javax.jms.Session' -import 'javax.jms.MessageListener' module JSparrow module Messaging # @@ -78,26 +77,26 @@ end # --- Private methods --- # private - def send_message(&message_creator) - # Cria uma conexao, uma sessao e um emissor de qualquer tipo de mensagem - connection = @connection_factory.create_connection - session = connection.create_session(true, Session::AUTO_ACKNOWLEDGE) - producer = session.create_producer(@destination) + def send_message(&message_creator) + # Cria uma conexao, uma sessao e um emissor de qualquer tipo de mensagem + connection = @connection_factory.create_connection + session = connection.create_session(true, Session::AUTO_ACKNOWLEDGE) + producer = session.create_producer(@destination) - # Obtem uma mensagem (TextMessage, ObjectMessage ou MapMessage) do criador especifico - message = message_creator.call(session) + # Obtem uma mensagem (TextMessage, ObjectMessage ou MapMessage) do criador especifico + message = message_creator.call(session) - # Envia a mensagem - producer.send(message) + # Envia a mensagem + producer.send(message) - # Commita a sessao e fecha a conexao - session.commit - connection.close - end + # Commita a sessao e fecha a conexao + session.commit + connection.close + end end # # Receptor de mensagens. # @@ -126,119 +125,24 @@ # Fecha a conexao connection.close end end - + # - # Ouvintes de mensagens. + # Identifica o tipo de uma mensagem. # - # TODO: Completar a implementacao. Ainda nao esta legal. (Ja dei um tapinha, - # acho que agora ta bem proximo do que deve ser.) - # - class Listener < Base - include MessageListener - - attr_reader :connection_factory_name, :destination_name, :criteria_to_receiving - - # - # Estes parametros serao injetados pelo listener manager de acordo com o - # que houver sido definido pelos metodos connection_factory_name e destination_name. - # - def initialize(connection_factory, destination) - super(connection_factory, destination) - - @connection_factory_name = 'undefined' - @destination_name = 'undefined' - @criteria_to_receiving = {} + module MessageType + def is_text_message? + respond_to? :get_text end - - # - # Nome JNDI da connection factory que ser usada para criar conexoes JMS. - # - # Invariavelmente deve ser usado pelas subclasses para informar qual devera - # ser a connection factory usada por esse listener. - # - def use_connection_factory(jndi_name) - @connection_factory_name = jndi_name + + def is_object_message? + (respond_to? :get_object and !(respond_to? :get_long)) end - - # - # Nome JNDI do destino JMS que sera escutado. - # - # Invariavelmente deve ser usado pelas subclasses, para informar o nome - # da queue ou topico que sera escutado. - # - def listen_to_destination(jndi_name) - @destination_name = jndi_name - end - - # - # Criterios de selecao de mensagens, seguindo o padrao JMS. - # - # Invariavelmente as subclasses precisam usar esse metodo para definir - # os criterios de recebimento que este listener levara em conta. - # - def receive_only_in_criteria(criteria = {:timeout => DEFAULT_RECEIVER_TIMEOUT, :selector => ''}) - # Valor default para timeout, caso nao tenha sido informado - @criteria_to_receiving[:timeout] = criteria[:timeout] || DEFAULT_RECEIVER_TIMEOUT - end - - # - # Inicia a escuta de mensagens. - # - def start_listening - # Cria uma conexao, uma sessao e um consumidor de qualquer tipo de mensagem - connection = @connection_factory.create_connection - session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE) - consumer = session.create_consumer(@destination, @criteria_for_receiving[:selector]) - - # Registra-se como ouvinte - consumer.message_listener = self - - # Inicia a escuta de mensagens - connection.start - end - - # - # Faz o enriquecimento do objeto mensagem e delega para o metodo on_receive_message - # que, implementado pelas subclasses, efetivamente trata a mensagem. - # - # Nao deve ser re-implementado por subclasses. - # - def on_message(received_message) - class << received_message - include MessageType - end - - on_receive_message(received_message) - end - - # - # E executado todas as vezes que chega uma mensagem que atenda aos criterios - # definido para este listener (na variavel de instancia @criteria_for_receiving). - # - # Invariavelmente deve ser re-implementado nas subclasses. - # - def on_receive_message(received_message) - raise Error::AbstractMethodError.new('on_receive_message') - end - end - end - - # - # Identifica o tipo de uma mensagem. - # - module MessageType - def is_text_message? - respond_to? :get_text - end - def is_object_message? - (respond_to? :get_object and !(respond_to? :get_long)) - end - - def is_map_message? - respond_to? :get_long + def is_map_message? + respond_to? :get_long + end end end end \ No newline at end of file