NoClassDefFoundError (ошибка инициализации) - Websphere и IBM MQ - PullRequest
10 голосов
/ 27 января 2011

У меня проблема с веб-приложением на основе Spring, которое развертывается в Websphere и взаимодействует с IBM MQ.

Все хорошо, пока я не попробую несколько тестов на сбой.

Пока веб-приложение запущено, я останавливаю IBM MQ. Затем я вызываю веб-приложение для отправки сообщения JMS. Веб-приложение зависло при вызове JmsTemplate.convertAndSend, и в каталоге ffdc было обнаружено следующее исключение.

Обратите внимание, что JmsTemplate был инициализирован с использованием JNDIObjectFactoryBean, где он получил настройки фабрики соединений MQ от Websphere.

Может ли кто-нибудь объяснить причину "Ошибка инициализации" ??

[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)

Ответы [ 2 ]

13 голосов
/ 28 января 2011

«(Ошибка инициализации)» означает, что метод статического инициализатора («») класса ранее вызывал непроверенное исключение. Когда это происходит, JVM помечает класс как плохой, и последующие попытки использовать или получить доступ к классу приводят к NoClassDefFoundError. Найдите в своих журналах ошибки, содержащие «Reason. » в трассировке стека, чтобы найти основную причину.

(Как правило, NoClassDefFoundError должен включать в себя «Причины», за исключением того, что произошло в статическом инициализаторе, но по какой-то причине причина либо отсутствовала, либо вы не включили ее в трассировку стека. )

0 голосов
/ 27 января 2011

Похоже, отсутствует каталог сообщений.Я читаю дамп стека, поскольку выброшенное исключение (NoClassDefFound) пытается получить доступ к чему-либо в своем конструкторе.Пропущенный класс может быть фактической причиной, или пропущенное сообщение может скрывать фактическое исключение, в зависимости от того, как оно было выброшено, конечно.Можете ли вы вставить блок catch и вручную просмотреть вложенные исключения?

Даже если это исключение не является частью вложенного исключения, это также может означать, что оно было создано в блоке catch неизвестного исключения.Я не ожидал бы этой проблемы в коде IBM MQ, но вы никогда не знаете.

...