Problemas com Message Listener em JMS

Oi pessoal.

Bem, estou com um problema com o JMS.

O meu caso é o seguinte:
tenho duas aplicações Java, uma standalone que envia as mensagens e outra no servidor (JBoss 5.0.1 GA com JBoss Messaging) que lê as mensagens. A que está no servidor foi criada com dynamic web project (Eclipse) já que não posso utilizar MDB. Por imposição do projecto em causa, tenho que usar também o ServletContextListener.

Aqui vai a minha aplicação que está no servidor e que lê as mensagens:

import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

public class Fornecedor implements ServletContextListener, MessageListener {

private QueueConnection queueConnectionReceive;


public void contextInitialized(ServletContextEvent evento) {
	
	System.out.println("MeuServletContextListener - iniciado: " +
               evento.getServletContext().getServerInfo());
	
	try {
	
		InitialContext ctx = new InitialContext();
		QueueConnectionFactory cf = (QueueConnectionFactory)ctx.lookup("/ConnectionFactory");
		queueConnectionReceive = cf.createQueueConnection();
		QueueSession queueSession = queueConnectionReceive.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

		Queue queue1 = (Queue) ctx.lookup("queue/Queue1");
	
		QueueReceiver queueReceiver1 = queueSession.createReceiver(queue1);
	
		Fornecedor queueListener = new Fornecedor();
		queueReceiver1.setMessageListener(queueListener);
	
		queueConnectionReceive.start();
		
		System.out.println("Receive ABERTO!!!");
		
	}
	catch(Exception e){
		e.printStackTrace();
	} 
}

   public void contextDestroyed(ServletContextEvent evento)
   {
       System.out.println("MeuServletContextListener - finalizado");
       
       try{
		if (queueConnectionReceive != null) {
			queueConnectionReceive.close();
			System.out.println("Receive FECHADO!!!");
		}	
	}
	catch (JMSException e){
		e.printStackTrace();	
	}  
   }
   
   
   public void onMessage(Message msg){
	   
	   try{
		if (msg instanceof TextMessage){
				
			TextMessage objmsg=(TextMessage) msg;
			System.out.println("MENSAGEM RECEBIDA "+objmsg.getText());
		}
	   }
	   catch (Exception e){
			e.printStackTrace();
	}
	   
   }

}


O problema que estou a ter é este:

java.lang.IllegalStateException: BaseClassLoader@7b6b89ad{vfszip:/C:/JBoss/server/default/deploy/Projecto3Supplier.war/} classLoader is not connected to a domain (probably undeployed?) for class javax.jms.TextMessage
at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:767)
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:415)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at server.Fornecedor.onMessage(Fornecedor.java:77)
at org.jboss.jms.client.container.ClientConsumer.callOnMessage(ClientConsumer.java:229)
DEBUG [org.jboss.jms.server.connectionmanager.SimpleConnectionManager] (WorkerThread#1[127.0.0.1:49564]) unregistered connection ConnectionEndpoint[yd-l3rjh4vf-1-zrq9f4vf-31zp0v-t21o4c5] with remoting session ID …-fv4hjr2s-d
at org.jboss.jms.client.container.ClientConsumer$ListenerRunner.run(ClientConsumer.java:1043)
at org.jboss.messaging.util.OrderedExecutorFactory$ChildExecutor.run(OrderedExecutorFactory.java:120)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)


O estranho é que o erro só surge intercalado com uma boa entrega da mensagem, ou seja, a primeira vez que faço o send da mensagem ela dá o erro acima, a segunda vez não dá erro e tudo funciona bem, a terceira vez já não funciona, a quarta funciona e assim sucessivamente…

De referir que tenho o ServletContextListener definido no web.xml.

Com toda a certeza deve ser um erro muito facil de detectar, mas só ando de volta do JMS há uns dias… :stuck_out_tongue:

Agradecia toda a ajuda que me pudessem dar, muito obrigado.

Fiquem bem.

Bem, problema resolvido…

No lookup pela ConnectionFactory tenho uma barra ("/") a mais e era isso que tava a criar problemas…

Olá,

Também estou com um problema com o Message Listener JMS.

Na realidade estou aprendendo como usar esse mecanismo de mensagens, tenho o seguinte:

2 instancias do JBoss 5.1.0 GA configurados em cluster
e um servidor apache 2.2 mod_jk para fazer o balanceamento.

Minha aplicação possui algumas informações em memória, porém quando ocorrer um evento qualquer em uma das instancias do JBoss, quero “avisar” os demais nodos do cluster para efetuarem uma operação, neste caso um refresh nessas informações.

Pensei em utilizar o JMS para isto, configurei a queue etc, conforme alguns tutoriais que encontrei no google, as mensagens, conforme meus logs são enviadas corretamente, também salvas no banco de dados (oracle no meu caso), porém, o outro nodo (outro Jboss) não dispara o metodo onMessage que implementei.

Não ocorre nenhum erro nos logs.

Alguém teria uma idéia do que possa estar acontecendo? Ou algum teste que eu possa fazer para identificar o problema?

Att