During evaluation of ActiveMQ we found incompatibilties´of MQ with BEA WLS 8.1 and WLS 10. We contacted the BEA support - they where investigating and pinpointed the problem:
Hello ,
This is regarding your support case ABCDEF titled Need help in configuring message bridge with ActiveMQ. Here I am with the response from the next level of support team on the following NullPointerException that I am getting while configuring a message bridge with WLS. It is observed that even other customers are also observing the same exception while configuring a message bridge with ActiveMQ.
<AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1197983909603> <BEA-000000> <Exception:
javax.jms.JMSException: java.lang.NullPointerException
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:46)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1181)
at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1551)
at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:465)
at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:356)
at weblogic.jms.adapter.JMSBaseConnection.sendInternal(JMSBaseConnection.java:794)
at weblogic.jms.adapter.JMSBaseConnection.access$200(JMSBaseConnection.java:84)
at weblogic.jms.adapter.JMSBaseConnection$6.run(JMSBaseConnection.java:707)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.jms.adapter.JMSBaseConnection.send(JMSBaseConnection.java:704)
It is confirmed that this is not an issue with WLS, but Active MQ not setting the JMS Destination after the message is sent. As per the JMS specification, it states that the JMSDestination should be set AFTER the message is sent. In the case of a client contacting weblogic, this should be the wlclient.jar classes, as these are used to handle the connection; in the case of wls -> wls via messaging bridge, it will still be the same classes, although these will embedded within the JMS server.
In the case of WLS -> ActiveMQ via a messaging bridge, the messaging bridge will create a connection to ActiveMQ using the ActiveMQ client classes. The messaging bridge won't be able to set the JMSDestination, because it can't be done after the message is sent. It can be done by either the ActiveMQ client classes or the ActiveMQ JMS server, becasue these will handle the post send method methods.
Could you attach a junit test case demonstrating the failure your reporting. Thanks.