为什么Tomcat在取消部署期间抛出'java.lang.IllegalStateException:Class invariant violation'?

mku*_*uff 8 java tomcat log4j

我有一个web-app(Tomcat 6,log4j 1.2.16),它以一个监听器开头.取消部署应用程序会引发以下异常:

 INFO (HqListener.java:28) - HqListener exited!
log4j:ERROR log4j called after unloading, see http://logging.apache.org/log4j/1.2/faq.html#unload.
java.lang.IllegalStateException: Class invariant violation
    at org.apache.log4j.LogManager.getLoggerRepository(LogManager.java:199)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:228)
    at org.apache.log4j.Logger.getLogger(Logger.java:117)
    at com.mchange.v2.log.log4j.Log4jMLog.getMLogger(Log4jMLog.java:51)
    at com.mchange.v2.log.MLog.getLogger(MLog.java:145)
    at com.mchange.v2.sql.SqlUtils.<clinit>(SqlUtils.java:37)
    at com.mchange.v2.c3p0.DataSources.pooledDataSource(DataSources.java:290)
    at com.mchange.v2.c3p0.DataSources.pooledDataSource(DataSources.java:316)
    at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:181)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:143)
    at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:51)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:90)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2863)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at net.hq.util.Db.init(Db.java:15)
    at net.hq.process.ConnectionGateway.run(ConnectionGateway.java:89)
    at java.lang.Thread.run(Thread.java:662)
Exception in thread "HQ Gateway Thread" java.lang.NullPointerException
    at net.hq.process.ConnectionGateway.run(ConnectionGateway.java:129)
    at java.lang.Thread.run(Thread.java:662)
Jul 3, 2011 3:03:53 AM org.apache.catalina.core.StandardContext stop
Run Code Online (Sandbox Code Playgroud)

HqListener.java 是我的倾听者,它报告成功关闭.

如何摆脱此异常消息?

Jos*_*hDM 8

检查此解决方案的jira错误:http://java.net/jira/browse/GLASSFISH-16767

stackoverflow上类似已解决的问题:从Glassfish取消部署Grails应用程序会导致类不变违规

设置属性

<jvm-options>
    -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false
</jvm-options>
Run Code Online (Sandbox Code Playgroud)

在Glassfish的domain.xml文件中解决了这个问题; 不确定在Tomcat中设置它的位置,也许是server.xml?

  • 将其添加到domain.xml的<server-config>的jvm-options中,该选项通常位于install-dir/glassfish/domains/domain1/config:<jvm-options> -Dorg.apache.catalina.loader中. WebappClassLoader.ENABLE_CLEAR_REFERENCES =假</ JVM选项> (3认同)