Estou usando o Application Server da Sun (SJAS) versão 8.1, e estou tento problemas para fazer o deploy de um MDB. Pesquisando no google e em fóruns diversos, não encontrei uma solução. Pensei ser algum detalhe de configuração ou algo assim, mas não consegui descobrir a causa do erro.
O código do Message Driven Bean é:
public class DefaultMessageConsumer implements MessageDrivenBean, MessageListener {
private MessageDrivenContext ctx;
public void ejbCreate () throws EJBException {
System.out.println("Criando DefaultMessageConsumer");
}
public void ejbRemove() throws EJBException {
System.out.println("Removendo DefaultMessageConsumer");
}
public void setMessageDrivenContext(MessageDrivenContext context) throws EJBException {
this.ctx = context;
}
public void onMessage(Message msg) {
TextMessage textMsg = null;
try {
if (msg instanceof TextMessage) {
textMsg = (TextMessage) msg;
System.out.println("Mensagem recebida: " + textMsg.getText());
} else {
System.out.println("Mensagem desconhecida");
}
} catch (JMSException e) {
ctx.setRollbackOnly();
}
}
}
Criei também o ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
version="2.1">
<enterprise-beans>
<message-driven>
<ejb-name>DefaultMessageConsumer</ejb-name>
<ejb-class>br.com.serasa.mdb.DefaultMessageConsumer</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<!-- Tipo de transação -->
<transaction-type>Container</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-link>fila</message-destination-link>
<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-property>
<activation-config-property-name>Destination</activation-config-property-name>
<activation-config-property-value>fila</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>AcknowledgeMode</activation-config-property-name>
<activation-config-property-value>Auto-acknowledge</activation-config-property-value>
</activation-config-property>
</activation-config>
<message-destination-ref>
<message-destination-ref-name>jms/fila</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Consumes</message-destination-usage>
<message-destination-link>fila</message-destination-link>
</message-destination-ref>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<message-destination>
<display-name>Destination for DefaultMessageConsumer</display-name>
<message-destination-name>fila</message-destination-name>
</message-destination>
</assembly-descriptor>
</ejb-jar>
E o sun-ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sun-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>DefaultMessageConsumer</ejb-name>
<jndi-name>jms/fila</jndi-name>
<message-destination-ref>
<message-destination-ref-name>fila</message-destination-ref-name>
<jndi-name>jms/fila</jndi-name>
</message-destination-ref>
<mdb-connection-factory>
<jndi-name>jms/QueueFactory</jndi-name>
</mdb-connection-factory>
</ejb>
<message-destination>
<message-destination-name>fila</message-destination-name>
<jndi-name>jms/fila</jndi-name>
</message-destination>
</enterprise-beans>
</sun-ejb-jar>
No application server criei uma QueueConnectionFactory com jndiName
jms/QueueFactory, e uma fila com jndiName jms/fila. Criei também uma physical destination (li na documentação que é necessário) do tipo Queue.
Empacotei tudo num jar e ao fazer deploy, aparece várias vezes a mensagem:
MQRA:EC:cNDMC():createConnection failed:[SET_CLIENTID_REPLY(51)] [C4036]: A server error occurred. : shared clientID's not supported w/o cluster user=guest, broker=cddesenv:7676(49906)
E logo depois o stack trace:
javax.resource.NotSupportedException: MQRA-endpointActivation:Error:creatMessageConsumer failed:aborting
at com.sun.messaging.jms.ra.ResourceAdapter.endpointActivation(ResourceAdapter.java:271)
at com.sun.enterprise.connectors.inflow.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:221)
at com.sun.ejb.containers.MessageBeanContainer.<init>(MessageBeanContainer.java:187)
at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:221)
at com.sun.enterprise.server.AbstractLoader.loadEjbs(AbstractLoader.java:477)
at com.sun.enterprise.server.EJBModuleLoader.load(EJBModuleLoader.java:93)
at com.sun.enterprise.server.StandAloneEJBModulesManager.moduleDeployed(StandAloneEJBModulesManager.java:201)
at com.sun.enterprise.server.StandAloneEJBModulesManager.moduleDeployed(StandAloneEJBModulesManager.java:156)
at com.sun.enterprise.server.StandAloneEJBModulesManager.moduleDeployed(StandAloneEJBModulesManager.java:388)
at com.sun.enterprise.admin.event.AdminEventMulticaster.invokeModuleDeployEventListener(AdminEventMulticaster.java:918)
at com.sun.enterprise.admin.event.AdminEventMulticaster.handleModuleDeployEvent(AdminEventMulticaster.java:905)
at com.sun.enterprise.admin.event.AdminEventMulticaster.processEvent(AdminEventMulticaster.java:427)
at com.sun.enterprise.admin.event.AdminEventMulticaster.multicastEvent(AdminEventMulticaster.java:139)
at com.sun.enterprise.ee.admin.mbeans.ServerRuntimeMBean.forwardEvent(ServerRuntimeMBean.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.sun.enterprise.admin.MBeanHelper.invokeOperationInBean(MBeanHelper.java:302)
at com.sun.enterprise.admin.runtime.BaseRuntimeMBean.invoke(BaseRuntimeMBean.java:383)
at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)
at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1408)
at javax.management.remote.rmi.RMIConnectionImpl.access$100(RMIConnectionImpl.java:81)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1245)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1341)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:782)
at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at com.sun.messaging.jms.ra.EndpointConsumer.createNonDurableMessageConsumer(EndpointConsumer.java:541)
at com.sun.messaging.jms.ra.EndpointConsumer.createMessageConsumer(EndpointConsumer.java:216)
at com.sun.messaging.jms.ra.ResourceAdapter.endpointActivation(ResourceAdapter.java:266)
... 38 more
Alguma idéia?