2011-07-03 34 views
8

Tôi có một ứng dụng web (Tomcat 6, log4j 1.2.16), bắt đầu với một người nghe. Undeploying ứng dụng ném ngoại lệ sau đây:Tại sao Tomcat lại ném 'java.lang.IllegalStateException: Vi phạm bất biến lớp' trong quá trình thất nghiệp?

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 là người biết lắng nghe tôi và nó báo cáo một shutdown thành công.

Làm cách nào để loại bỏ thông báo ngoại lệ này?

+0

bạn có thể tìm kiếm cấu hình trong log4j, tôi có vấn đề tương tự với aplications trong tomcat6 hoạt động "tốt" trong tomcat5.5 –

Trả lời

8

Kiểm tra jira này lỗi cho giải pháp của bạn: http://java.net/jira/browse/GLASSFISH-16767

tương tự vấn đề được giải quyết trên stackoverflow ở đây: Undeploying a Grails App from Glassfish gets a Class invariant violation

Thiết lập thuộc tính

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

trong file domain.xml trong Glassfish giải quyết vấn đề này ; không chắc chắn nơi để thiết lập này trong Tomcat, có lẽ server.xml?

+0

bạn có thể cung cấp mẫu domain.xml để đặt thuộc tính này không. Nó là tài sản hệ thống? kinkajou

+3

Thêm tùy chọn này vào các tùy chọn jvm của của domain.xml, thường được tìm thấy trong install-dir/glassfish/domains/domain1/config: -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = false Oversteer

2

Cách tôi giải quyết vấn đề này (trong môi trường thủy tinh) là tránh khai báo trình ghi nhật ký là tĩnh, ví dụ:

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

Nếu bạn loại bỏ static từ việc khai báo ở trên, bạn sẽ không còn nhận được lỗi trên.

Các vấn đề liên quan