Hi,

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.
Am I missing something? Is there a workaround to this?
Many thanks for the response.

Best Regards,
Rajeev Verma

Reply via email to