Ajuda com EJB3 MDB

Olá pessoal,

estou tentando usar o Message Driven Bean 3, porém ainda não consegui. Tudo o que eu consigo é “deployar” ele com sucesso, porém não consigo enviar uma mensagem para ele através de um cliente. Segue abaixo o meu mdb:

package teste.ejb.mdb;

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;

import teste.vo.Evento;

@MessageDriven(activationConfig =
{
  @ActivationConfigProperty(propertyName="destinationType",
    propertyValue="javax.jms.Queue"),
  @ActivationConfigProperty(propertyName="destination",
    propertyValue="queue/testQueue")
})
public class ManutencaoBean implements MessageListener {

	public void onMessage(Message msg) {
		try {
			ObjectMessage mensagem = (ObjectMessage) msg;
			Evento evento = (Evento) mensagem.getObject();
			System.out.println("Evento: "+evento.getNome());
			System.out.println("Cliente: "+evento.getCliente().getNome());
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Segue abaixo meu cliente:

package teste;

import java.util.Hashtable;

import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.jnp.interfaces.NamingContext;

import teste.ejb.EJBFactory;
import teste.ejb.ManutencaoBean;
import teste.ejb.SessionFacade;
import teste.ejb.SessionFacadeRemote;
import teste.vo.Cliente;
import teste.vo.Evento;
import teste.vo.Manutencao;

public class App {

	public static void main(String[] args) throws NamingException {
		try {
			
			InitialContext ic = new InitialContext();

	        ConnectionFactory cf = (ConnectionFactory) ic.lookup("ConnectionFactory");
	        Queue queue = (Queue)ic.lookup("queue/testQueue");
	        
	        Connection connection = cf.createConnection();
	        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
	        MessageProducer sender = session.createProducer(queue);
	        
	        ObjectMessage msg = session.createObjectMessage();
			
			Cliente cliente = new Cliente();
			cliente.setNome("Jalerson Lima");

			Evento evento = new Evento();
			evento.setNome("Alarme!");
			evento.setCliente(cliente);
			
			msg.setObject(evento);
			
			sender.send(msg);

		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
	}
}

O erro é sempre na linha:

ConnectionFactory cf = (ConnectionFactory) ic.lookup("ConnectionFactory");

Segue abaixo o erro:

Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
	java.lang.ClassNotFoundException: org.jboss.mq.referenceable.ObjectRefAddr (no security manager: RMI class loader disabled)]
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:722)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at teste.App.main(App.java:42)
Caused by: java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
	java.lang.ClassNotFoundException: org.jboss.mq.referenceable.ObjectRefAddr (no security manager: RMI class loader disabled)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
	... 3 more
Caused by: java.lang.ClassNotFoundException: org.jboss.mq.referenceable.ObjectRefAddr (no security manager: RMI class loader disabled)
	at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
	at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
	at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
	at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
	at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readArray(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
	at java.io.ObjectInputStream.readSerialData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
	at java.io.ObjectInputStream.readSerialData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
	... 6 more

Também já tentei chamar por “java:JmsXA” (erro: not bound). Alguém sabe o que está errado?

Obrigado!

Qual application server estais usando? Eu tentei o JBoss 4.0.5 e tive problemas com o serviço de nomes. Então deixei a versão 4.0.4 mesmo. Outra coisa, no site do The Server Side tem o novo livro do Ed Roman sobre EJB 3 pra baixar de graça. Talvez uma consulta também ajude. T+