JMSBridgeConnectors does not work with IBM MQ and ActiveMQ 5.4.0
----------------------------------------------------------------
Key: AMQ-2963
URL: https://issues.apache.org/activemq/browse/AMQ-2963
Project: ActiveMQ
Issue Type: Bug
Components: Connector
Affects Versions: 5.4.1, 5.4.0, 5.3.2, 5.3.1, 5.3.0
Environment: Operating System - Windows XP Professional
Tomcat v6.0.28
IBM Websphere MQ v7.0.1.2
ActiveMQ 5.4.0
Reporter: Rajeev Verma
We are trying to create a bridge with IBM Websphere Queue and ActiveMQ queue.
We have defined a broker in activemq.xml with following jmsBridgeConnectors
information:
<jmsBridgeConnectors>
<jmsQueueConnector
outboundQueueConnectionFactory="#remoteFactory">
<inboundQueueBridges>
<inboundQueueBridge inboundQueueName="IBM.TO.ACTIVEMQ"
localQueueName="IBM.TO.ACTIVEMQ"/>
</inboundQueueBridges>
</jmsQueueConnector>
</jmsBridgeConnectors>
We are getting below error with activemq 5.4.0 and it works fine with version
5.2.0:
com.ibm.msg.client.jms.DetailedInvalidDestinationException: JMSCMQ0005: The
destination name '://IBM.TO.ACTIVEMQ' was not valid. The destination name
specified does not conform to published destination syntax. Correct the
specified destination name and try again.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:313)
at
com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:388)
at
com.ibm.msg.client.wmq.common.internal.WMQDestinationURIParser.setUri(WMQDestinationURIParser.java:524)
at
com.ibm.msg.client.wmq.common.internal.WMQDestination.<init>(WMQDestination.java:3148)
at
com.ibm.msg.client.wmq.common.internal.WMQDestination.<init>(WMQDestination.java:3104)
at
com.ibm.msg.client.wmq.factories.WMQFactoryFactory.createProviderDestination(WMQFactoryFactory.java:444)
at
com.ibm.msg.client.jms.admin.JmsDestinationImpl.setProviderDestination(JmsDestinationImpl.java:333)
at
com.ibm.msg.client.jms.admin.JmsDestinationImpl.initialise(JmsDestinationImpl.java:231)
at
com.ibm.msg.client.jms.admin.JmsDestinationImpl.<init>(JmsDestinationImpl.java:196)
at
com.ibm.msg.client.jms.admin.JmsJndiDestinationImpl.<init>(JmsJndiDestinationImpl.java:129)
at com.ibm.mq.jms.MQDestination.<init>(MQDestination.java:186)
at
com.ibm.msg.client.wmq.factories.admin.WMQJmsFactory.createDestination(WMQJmsFactory.java:125)
at
com.ibm.msg.client.jms.internal.JmsMessageImpl.providerDestToJmsDest(JmsMessageImpl.java:2111)
at
com.ibm.msg.client.jms.internal.JmsMessageImpl.getJMSDestination(JmsMessageImpl.java:686)
at com.ibm.jms.JMSMessage.getJMSDestination(JMSMessage.java:605)
at
org.apache.activemq.ActiveMQMessageTransformation.copyProperties(ActiveMQMessageTransformation.java:206)
at
org.apache.activemq.ActiveMQMessageTransformation.transformMessage(ActiveMQMessageTransformation.java:188)
at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1720)
at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:231)
at
org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:300)
at
org.apache.activemq.ActiveMQQueueSender.send(ActiveMQQueueSender.java:111)
at
org.apache.activemq.network.jms.QueueBridge.sendMessage(QueueBridge.java:80)
at
org.apache.activemq.network.jms.DestinationBridge.onMessage(DestinationBridge.java:129)
at
com.ibm.mq.jms.MQMessageConsumer$FacadeMessageListener.onMessage(MQMessageConsumer.java:399)
at
com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl$JmsProviderMessageListener.onMessage(JmsMessageConsumerImpl.java:904)
at
com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.honourNoLocal(WMQAsyncConsumerShadow.java:550)
at
com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.consumer(WMQAsyncConsumerShadow.java:384)
at
com.ibm.mq.jmqi.remote.internal.RemoteAsyncConsume.driveConsumer(RemoteAsyncConsume.java:1478)
at
com.ibm.mq.jmqi.remote.internal.RemoteDispatchThread.run(RemoteDispatchThread.java:385)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:209)
at
com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:100)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:224)
at
com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:298)
at
com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1220)
I looked at the code for class ActiveMQsession has a method send which was
modified after v 5.2.0 and below lines of code were moved before transforming
the IBM JMS Message to Active MQ message:
message.setJMSDestination(destination);
message.setJMSDeliveryMode(deliveryMode);
long expiration = 0L;
if (!producer.getDisableMessageTimestamp()) {
long timeStamp = System.currentTimeMillis();
message.setJMSTimestamp(timeStamp);
if (timeToLive > 0) {
expiration = timeToLive + timeStamp;
}
}
message.setJMSExpiration(expiration);
message.setJMSPriority(priority);
message.setJMSRedelivered(false);
Now code sets the ActiveMQDestination as the JMS destination to IBM Message
before transformation and we are getting above error when JMS properties are
getting copied from IBM Message to ActiveMQMessage inside
ActiveMQMessageTransformation.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.