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
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.messaging.destination:service=Queue,name=JBossTesteQueue"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
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