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