2011-07-03 7 views
8

나는 Web-app (Tomcat 6, log4j 1.2.16)를 가지고 있는데, 이것은 청취자로 시작한다. 응용 프로그램을 배포 해제하면 다음과 같은 예외가 발생합니다 :Tomcat이 배포를 취소하는 동안 'java.lang.IllegalStateException : 클래스가 변경되지 않습니다.'

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에서 "괜찮음"으로 작동하는 tomcat6의 응용 프로그램과 비슷한 문제가 있습니다. –

답변

8

확인 솔루션이 JIRA 버그 : http://java.net/jira/browse/GLASSFISH-16767

유사 해결 문제 유래에 여기 : Undeploying a Grails App from Glassfish gets a Class invariant violation

글래스 피쉬 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-options에이를 추가합니다. -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = false Oversteer

2

글래스 피시 환경에서이 문제를 해결 한 방법은 로거를 정적으로 선언하는 것을 피하는 것입니다.

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

위의 선언에서 static을 제거하면 더 이상 위의 오류가 발생하지 않습니다.

관련 문제