我的构建过程构建并将.war文件复制到$ TOMCAT_HOME / webapps。 75%或更多的时间,这工作正常。但是,catalina.log文件时不时会显示以下内容,然后Tomcat上部署的所有应用程序都完全陷入困境:
Oct 1, 2009 3:33:30 PM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/lucidity]
Oct 1, 2009 3:33:30 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive lucidity.war
Oct 1, 2009 3:33:32 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/Users/ptomblin/apache-tomcat-6.0.20/webapps/lucidity/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Oct 1, 2009 3:33:32 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load java.net.BindException. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399)
at com.mysql.jdbc.CommunicationsException.<init>(CommunicationsException.java:155)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2652)
at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1345)
at com.mysql.jdbc.Connection.realClose(Connection.java:4784)
at com.mysql.jdbc.Connection.cleanup(Connection.java:2040)
at com.mysql.jdbc.Connection.finalize(Connection.java:3296)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.
还有其他方法我应该将这个WAR文件加载到Tomcat中吗?
答案 0 :(得分:1)
好吧,我不再使用那个特定的Tomcat服务器了,当我将WAR文件加载到我自己托管的tomcat时,它有时会给出异常,但是它会再次尝试并最终加载它。我不知道为什么其他Tomcat就像它一样,但托管公司显然对它做了一些改变。
答案 1 :(得分:1)
我遇到了这个问题。 JDBC的连接对象的主要原因(我想它是静态的)...所以只需关闭它并在ovverrided函数finilizer()中给它赋值null,如下所示(con指的是连接Obj。):
@Override
protected void finalize() throws Throwable {
super.finalize();
try{
con.close();
}catch(Exception r){
r.getMessage();
}
con=null;
}
这解决了我的问题,但另一方面我不建议使用连接作为静态永远.. 微米。