Ale*_*lex 11 java websphere spring jms ibm-mq
我在基于Spring的webapp上遇到问题,该Webapp正在部署到Websphere并与IBM MQ交互.
一切都很好,直到我尝试一些失败测试.
当webapp启动并运行时,我会停止IBM MQ.然后我调用webapp发送JMS消息.Web应用程序在调用JmsTemplate.convertAndSend时挂起,并在ffdc目录中找到以下异常.
注意JmsTemplate是使用JNDIObjectFactoryBean初始化的,它从Websphere获得了MQ Connection Factory设置.
谁能解释"初始化失败"背后的原因?
[27/01/11 14:29:39:498 GMT] FFDC Exception:java.lang.NoClassDefFoundError SourceId:com.ibm.ws.asynchbeans.J2EEContext.run ProbeId:894 Reporter:com.ibm.ws.asynchbeans.J2EEContext@1280128
java.lang.NoClassDefFoundError: com.ibm.msg.client.wmq.common.internal.Reason (initialization failure)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.checkJmqiCallSuccess(WMQMessageProducer.java:1024)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.checkJmqiCallSuccess(WMQMessageProducer.java:997)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.access$800(WMQMessageProducer.java:63)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.initialise(WMQMessageProducer.java:758)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.<init>(WMQMessageProducer.java:972)
at com.ibm.msg.client.wmq.internal.WMQSession.createProducer(WMQSession.java:943)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1162)
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 com.ibm.ejs.jms.JMSMessageProducerHandle.<init>(JMSMessageProducerHandle.java:132)
at com.ibm.ejs.jms.JMSSessionHandle.createProducer(JMSSessionHandle.java:1788)
at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:968)
at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:949)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:568)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:541)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:471)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:539)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:617)
Run Code Online (Sandbox Code Playgroud)
Bre*_*ail 14
"(初始化失败)"意味着该类的静态初始化程序("<clinit>")方法先前抛出了未经检查的异常.发生这种情况时,JVM会将该类标记为错误,并且后续尝试使用或访问该类会导致NoClassDefFoundError.在日志中搜索包含堆栈跟踪中"Reason.<clinit>"的错误,以查找根本原因.
(通常,NoClassDefFoundError应包含"由...引起的",但静态初始化程序中发生异常,但由于某种原因,原因不存在或者您没有将其包含在堆栈跟踪中.)
看起来确实缺少消息目录。我正在读取堆栈转储,因为抛出的异常(NoClassDefFound)正在尝试访问其构造函数中的某些内容。丢失的类可能是实际原因,或者丢失的消息可能隐藏了实际的异常,当然这取决于它是如何抛出的。您可以放入 catch 块并手动遍历嵌套异常吗?
即使此异常不是嵌套异常的一部分,也可能意味着它是在未知异常的 catch 块内实例化的。我没想到 IBM 的 MQ 代码会出现这个问题,但你永远不知道。
| 归档时间: |
|
| 查看次数: |
38360 次 |
| 最近记录: |