2011-07-03 53 views
8

我有一个web应用程序(Tomcat 6,log4j 1.2.16),它以一个监听器开始。取消部署应用程序将引发以下异常:为什么Tomcat在取消部署期间抛出'java.lang.IllegalStateException:Class invariant violation'?

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 

HqListener.java是我的监听器和它报告一个成功关机。

如何摆脱此异常消息?

+0

您可能搜索在log4j中的配置,我有类似的问题与tomcat6中的应用程序,在tomcat5.5中工作“很好” –

回答

8

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

类似的解决问题的计算器在这里:Undeploying a Grails App from Glassfish gets a Class invariant violation

在Glassfish的domain.xml文件设置该属性

<jvm-options> 
    -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false 
</jvm-options> 

解决问题;不知道在Tomcat中设置此位置,可能server.xml?

+0

您可以提供示例domain.xml放置此属性的位置。它是系统属性吗? kinkajou

+3

将此添加到domain.xml的的jvm选项中,这通常是找到的在install-dir/glassfish/domains/domain1/config中: -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = false Oversteer

2

我解决这个问题的方式(在glassfish环境中)是避免将记录器声明为静态的,例如,

private static final Logger logger = LoggerFactory.getLogger(BootStrapListener.class); 

如果从上述声明中删除static,将不会再出现上述错误。

相关问题