2011-07-03 1 views
8

私はリスナーで始まるweb-app(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で設定を検索している可能性があります。tomcat5.5の "fine"で動作するtomcat6のアプリケーションと同様の問題があります。 –

答えて

8

チェックあなたのソリューションのため、このJIRAのバグ:http://java.net/jira/browse/GLASSFISH-16767

同様の解決の問題のstackoverflowにここに: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

通常これが見つかるのjvm-optionsにこれを追加します。 -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = false Oversteer

2

私がこの問題をグラスフィッシュ環境で解決したのは、ロガーを静的なものとして宣言しないようにすることです。

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

上記の宣言からstaticを削除すると、上記のエラーは発生しなくなります。

関連する問題