Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-2963

JMSBridgeConnectors does not work with IBM MQ and ActiveMQ 5.4.0

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.3.0, 5.3.1, 5.3.2, 5.4.0, 5.4.1
    • 5.5.0
    • Connector
    • None
    • Operating System - Windows XP Professional
      Tomcat v6.0.28
      IBM Websphere MQ v7.0.1.2
      ActiveMQ 5.4.0

    Description

      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.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            gtully Gary Tully
            r_v_rajeev Rajeev Verma
            Votes:
            2 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment