Spring JmsTemplate & WebSphere MQ - игнорирование RECEIVE_TIMEOUT_NO_WAIT - PullRequest
0 голосов
/ 26 мая 2011

Я использую Spring JmsTemplate и WebSphere MQ (внутри WebSphere App Server).

Я создаю экземпляр JmsTemplate следующим образом:

def templateFor(managerJndiName: String) = {
  val connectionFactory = context.lookup(managerJndiName).asInstanceOf[QueueConnectionFactory]
  val jmsTemplate = new JmsTemplate(connectionFactory)
  jmsTemplate.setReceiveTimeout(JmsTemplate.RECEIVE_TIMEOUT_NO_WAIT)
  jmsTemplate
}

Примечание. Время ожидания установлено равным no_wait(-1).Тем не менее, поток все еще блокирует.

[5/26/11 11:53:32:183 EST] 0000003d TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[Default : 2,5,main]. The stack trace of this thread when the timeout occurred was: 
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:167)
    com.ibm.mq.jmqi.remote.internal.system.RemoteProxyQueue.proxyMQGET(RemoteProxyQueue.java:2585)
    com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiGetMessage(RemoteFAP.java:5603)
    com.ibm.mq.jmqi.internal.JmqiTools.getMessage(JmqiTools.java:1056)
    com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiGet(RemoteFAP.java:5540)
    com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg(WMQConsumerShadow.java:1169)
    com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInternal(WMQSyncConsumerShadow.java:233)
    com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQConsumerShadow.java:922)
    com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMessageConsumer.java:450)
    com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage(JmsMessageConsumerImpl.java:742)
    com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive(JmsMessageConsumerImpl.java:321)
    com.ibm.mq.jms.MQMessageConsumer.receive(MQMessageConsumer.java:228)
    com.ibm.ejs.jms.JMSMessageConsumerHandle.receive(JMSMessageConsumerHandle.java:444)
    org.springframework.jms.core.JmsTemplate.doReceive(JmsTemplate.java:669)
    org.springframework.jms.core.JmsTemplate.doReceive(JmsTemplate.java:657)
    org.springframework.jms.core.JmsTemplate$8.doInJms(JmsTemplate.java:613)
    org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:432)
    org.springframework.jms.core.JmsTemplate.receive(JmsTemplate.java:611)
    mypackage.MessageQueue.readMessage(MessageQueue.scala:86)

Что я пропустил?

1 Ответ

0 голосов
/ 26 мая 2011

Из-за хака, описанного в комментариях к этому вопросу Я думал, что использую Spring 3, но я использовал Spring 1. Что касается кода, Spring 1 не поддерживает RECEIVE_TIMEOUT_NO_WAIT

...