We are connecting from a Tomcat 6 application to IBM MQ 9.0 using JMSTemplate from Spring 2.0.8 and mqjms jar of 7.0.x. Application is very old and being ported from OC4J to Tomcat, that is why is old version of java and libraries are used. JMSTemplate configuration is as below
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="destinationResolver" ref="jmsDestinationResolver" />
<property name="pubSubDomain" value="false" />
<property name="receiveTimeout" value="10000" />
<property name="explicitQosEnabled" value="true" />
<property name="timeToLive" value="604800000" /><!-- 7 days -->
</bean>
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="port" value="${mqConnectionFactory.port}" />
<property name="hostName" value="${mqConnectionFactory.hostName}" />
<property name="channel" value="${mqConnectionFactory.channel}" />
<property name="queueManager" value="${mqConnectionFactory.queueManager}" />
<property name="clientID" value="${mqConnectionFactory.clientID}"/>
<property name="transportType" value="${mqConnectionFactory.transportType}" />
</bean>
<bean id="mqQueue" class="com.ibm.mq.jms.MQQueue">
<property name="baseQueueName" value="${mqQueueName}" />
</bean>
<bean id="jmsQueueConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="mqConnectionFactory" />
<property name="username" value="${mqUserName}" />
<property name="password" value="${mqPassword}" />
</bean>
<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver"/>
Once the application is started, threads start hanging and eventually all threads are used. When we take a thread dump, all threads are hanging on
at java.lang.Object.wait(Native Method)
at com.ibm.mq.jmqi.remote.internal.RemoteHconn.receiveAsyncTsh(RemoteHconn.java:1825)
- locked [0x00007f49e14cb670] (a com.ibm.mq.jmqi.remote.internal.RemoteHconn$AsyncTshLock)
at com.ibm.mq.jmqi.remote.internal.RemoteHconn.receiveTSH(RemoteHconn.java:1109)
at com.ibm.mq.jmqi.remote.internal.RemoteHconn.receiveMQIFlow(RemoteHconn.java:1622)
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.spiQuerySpi(RemoteFAP.java:5464)
at com.ibm.mq.jmqi.remote.internal.RemoteHconn.getVerbArray(RemoteHconn.java:3055)
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.spiOpen(RemoteFAP.java:4821)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.initialise(WMQMessageProducer.java:760)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer. (WMQMessageProducer.java:977)
at com.ibm.msg.client.wmq.internal.WMQSession.createProducer(WMQSession.java:965)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1187)
- locked [0x00007f49e18cf478] (a java.lang.Object)
at com.ibm.msg.client.jms.internal.JmsQueueSessionImpl.createSender(JmsQueueSessionImpl.java:131)
at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:148)
at com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:249)
at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:851)
at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:832)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:509)
at org.springframework.jms.core.JmsTemplate$2.doInJms(JmsTemplate.java:482)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:437)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:480)
Since the versions used except IBM MQ are old, it is very hard to get any help. Could anyone throw some light on this issue and a possible solution?