JBoss Messaging JMS com JBoss 5.1

4 respostas
E

Olá, estou com problemas em fazer funcionar um exemplo de JMS com Queue e consequentemente com Topic no JBoss 5.1. Tenho o seguinte código em um arquivo chamado queues-service.xml na pasta de deploy do server.

<?xml version="1.0" encoding="UTF-8"?>
<server>
    <mbean code="org.jboss.jms.server.destination.QueueService"
      name="jboss.soa.esb.destination:service=Queue,name=filateste"
      xmbean-dd="xmdesc/Queue-xmbean.xml">
        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
        <depends>jboss.messaging:service=PostOffice</depends>
    </mbean>
</server>

Uma classe com o seguinte código para registrar o MessageListener

public class RegistraTratadorNaFila {
	public static void main(String[] args) throws NamingException, JMSException {
		InitialContext ic = new InitialContext();
		QueueConnectionFactory qcf = (QueueConnectionFactory) ic.lookup("ConnectionFactory");
		QueueConnection qc = qcf.createQueueConnection();
		QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
		Queue q = (Queue) ic.lookup("queue/filateste");
		QueueReceiver qr = qs.createReceiver(q);
		qr.setMessageListener(new TratadorDeMensagem());
		qc.start();
	}
}

Depois uma classe cliente para enviar mensagens para a fila

public class EnviaMensagemParaFila {
	public static void main(String[] args) throws NamingException, JMSException {
		InitialContext ic = new InitialContext();
		QueueConnectionFactory qcf = (QueueConnectionFactory) 
			ic.lookup("ConnectionFactory");
		QueueConnection qc = qcf.createQueueConnection();
		QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
		
		TextMessage tm = qs.createTextMessage();
		tm.setText("Mensagem de texto para uma Queue");
		
		Queue q = (Queue) ic.lookup("queue/filateste");
		QueueSender queueSender = qs.createSender(q);
		queueSender.send(tm);
	}
}

Ao executar a primeira classe, no exemplo que tenho, diz que ao executar o método start() a classe ficaria em execução, mas ela termina. Depois ao executar o cliente que envia mensagem, o seguinte erro fica aparecendo no console do JBoss no Eclipse

21:52:32,968 WARN  [SimpleConnectionManager] A problem has been detected with the connection to remote client 5c4o11u-mromt9-g88022jn-1-g88024k3-4, jmsClientID=b-s152088g-1-nj22088g-9tmorm-u11o4c5. It is possible the client has exited without closing its connection(s) or the network has failed. All associated connection resources will be cleaned up.

Grato

4 Respostas

Paulo_Silveira

como sabe que o RegistraTratadorNaFila esta terminando todas as threads? alguma exception sobe?

no console do jboss da pra ver a filateste la?

E

Oi Paulo. No console do Eclipse a aplicação não fica em execução. A fila aparece no jmx-console sim.

E

Paulo, baixando os exemplos do JBoss Messaging, verifico que ele faz uso do mesmo Connection, aí funciona. Mas ele coloca tudo em uma única classe, o que é trabalhando de forma diferente no material que me enviou, onde se tem uma classe que registra o tratador das mensagens (leitura) e uma classe para envio. Me parece que deveria trabalhar sempre com a mesma Connection.

Ainda continuo em seu aguardo

Obrigado

E

Paulo, uma maneira para contornar o problema, depois de exaustivas pesquisas foi adicionar o seguinte código após o start na classe de registro, para fazer com o que a connection ficasse ativa.

do { Thread.sleep(10000); } while (true); }

Criado 19 de abril de 2010
Ultima resposta 20 de abr. de 2010
Respostas 4
Participantes 2