Problemas com MDB no JBoss 5.0

Olá,

Estou tento um problema para executar um MDB no JBoss 5.0. O usuário através de um servlet chama a classe Messenger que é a responsável por postar a mensagem em uma fila JMS:

[code]package com.jboss.ejb.teste.message;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.naming.InitialContext;

public class Messenger {

private QueueConnectionFactory connectionFactory;
private Destination destination;

public Messenger() {
	try {
		InitialContext ctx = new InitialContext();
		
		connectionFactory = (QueueConnectionFactory) ctx.lookup("java:/ConnectionFactory");
		destination = (Destination) ctx.lookup("queue/JBossTesteQueue");
	}
	catch (Exception exc) {
		exc.printStackTrace();
	}
}

public void sendMessage(String nome) {
	try {
		Connection connection = connectionFactory.createQueueConnection();
		Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

		MessageProducer producer = session.createProducer(destination);
		
		ObjectMessage message = session.createObjectMessage();
		message.setObject(nome);
		
		producer.send(message);
		
		session.close();
		connection.close();
		
		System.out.println("Mensagem enviada com sucesso!");
	}
	catch (Exception exc) {
		exc.printStackTrace();
	}
}

}[/code]

Esta classe funciona perfeitamente, porém o MDB não roda de jeito nenhum… eis o código:

[code]package com.jboss.ejb.teste.message;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;

@MessageDriven(
mappedName = "MessageConsumer",
activationConfig = {
@ActivationConfigProperty(
propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(
propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(
propertyName = "destination", propertyValue = "queue/JBossTesteQueue")
}
)
public class MessageConsumer implements MessageListener {

@Resource
private MessageDrivenContext context;

public void onMessage(Message message) {
	try {
		ObjectMessage objectMessage = (ObjectMessage) message;
		
		String time = new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss").format(new Date());
		System.out.println("Mensagem recebida em " + time);
		System.out.println("Content: " + objectMessage.getObject());
	}
	catch (JMSException exc) {
		exc.printStackTrace();
		context.setRollbackOnly();
	}
}

}[/code]

Este é o arquivo ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <display-name>JBossEJBTeste_ejb</display-name> <enterprise-beans> <message-driven> <ejb-name>MessageConsumer</ejb-name> <ejb-class>com.jboss.ejb.teste.message.MessageConsumer</ejb-class> <transaction-type>Container</transaction-type> <message-destination-type>javax.jms.Queue</message-destination-type> </message-driven> </enterprise-beans> </ejb-jar>

e este é o jboss.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<jboss>
<enterprise-beans>
<message-driven>
<ejb-name>MessageConsumer</ejb-name>
<configuration-name>Standard Message Driven Bean</configuration-name>
<destination-jndi-name>queue/JBossTesteQueue</destination-jndi-name>
<activation-config>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
</enterprise-beans>
</jboss>[/code]

A fila foi criada desta forma no arquivo destinations-service.xml

&lt;mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.messaging.destination:service=Queue,name=JBossTesteQueue" xmbean-dd="xmdesc/Queue-xmbean.xml"&gt; &lt;depends optional-attribute-name="ServerPeer"&gt;jboss.messaging:service=ServerPeer&lt;/depends&gt; &lt;depends&gt;jboss.messaging:service=PostOffice&lt;/depends&gt; &lt;/mbean&gt;

Gostaria de saber o que pode estar errado, pois não consegui fazer o MDB rodar de jeito nenhum. Nenhuma exceção é lançada durante o deploy e o JBoss informa que iniciou o MDB corretamente.

Agradeço a quem puder ajudar

Ninguém nunca passou por um problema parecido? :shock:

Baldão, estou com o mesmo problema, vc conseguiu identificar o que tinha de errado?

Abraços
Vanderlei

Olá Baldão tenta fazer a seguinte alteração:
Modificar o seguinte trecho,

@ActivationConfigProperty(
	            propertyName = "destination", propertyValue = "queue/JBossTesteQueue")

Por este :

@ActivationConfigProperty(
	            propertyName = "destination", propertyValue = "/queue/JBossTesteQueue")

Faz um teste ae.Eu utilizo o JBoss 5.1.0 e meus MDB`s são configurados assim.
Qualquer problema posta ae …

Caros,

Estou com o mesmo problema, aparentemente ele starta o MDB corretamente, mas nada acontece :smiley:

Lord, testei com a barra na frente e continuou na mesma…

A única coisa que aparece no log do jboss é:

15:45:56,753 INFO [EJBContainer] STARTED EJB: com.test.TestMDB ejbName: TestMDB

E fica nisso…

Lá no JMX Console onde aparece a fila configurada, ela está lá, e em Consumer Count aparece sempre 0 (zero). Ou seja o MDB não está conectado na fila. Mas está tudo certinho aparentemente, igual ao dos amigos acima. Estou usando Jboss 5.1.0 integrado ao HornetQ 2.1.2.

Help us