-1

我有一个在 Tomcat 6 上运行的 Spring Integration 应用程序。它有一个message-driven-channel-adapter并与远程 Active MQ 服务器通信。到目前为止,我能够完成我的工作。

但是,当我关闭 Tomcat 时,我在 catalina 日志中不断循环出现以下异常:

Exception in thread   "org.springframework.jms.listener.DefaultMessageListenerContainer#0-178" Exception in thread "org.springframework.jms.listener.DefaultMessageListenerContainer#0-179" 

 java.lang.NullPointerException
    at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
    at org.apache.log4j.Logger.getLogger(Logger.java:104)
    at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289)
    at org.apache.commons.logging.impl.Log4JLogger.trace(Log4JLogger.java:166)
    at org.springframework.jms.support.JmsUtils.closeMessageConsumer(JmsUtils.java:158)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.clearResources(DefaultMessageListenerContainer.java:1111)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:971)
    at java.lang.Thread.run(Thread.java:722)

java.lang.NullPointerException
    at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
    at org.apache.log4j.Logger.getLogger(Logger.java:104)
    at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289)
    at org.apache.commons.logging.impl.Log4JLogger.trace(Log4JLogger.java:166)
    at org.springframework.jms.support.JmsUtils.closeSession(JmsUtils.java:115)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.clearResources(DefaultMessageListenerContainer.java:1112)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:971)
    at java.lang.Thread.run(Thread.java:722)
Nov 13, 2012 7:23:37 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load org.apache.log4j.spi.VectorWriter.  The eventual following stack trace is ca
used by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:154)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.log(Category.java:853)
    at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:234)
    at org.springframework.jms.listener.DefaultMessageListenerContainer.handleListenerSetupFailure(DefaultMessageListenerContainer.java:831)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:981)
    at java.lang.Thread.run(Thread.java:722)

你们对此有什么想法吗?在关闭 Tomcat 之前是否需要关闭或销毁 Spring 上下文?

感谢你的帮助

谢谢,凯思

4

1 回答 1

0

好吧,看起来你是对的:

在关闭 Tomcat 之前是否需要关闭或销毁 Spring 上下文?

从 Spring JSM 源代码来看,您的 Tomcat 似乎更早地关闭了它的log4j.LogManager,然后 Spring 停止了它的上下文。

于 2013-09-11T06:43:20.043 回答