2009-10-13 82 views
1

感谢您花时间查看我的问题。Mysql/j连接器在Tomcat下神秘地卸载6/JDK 6

我开发的Java WAR文件一次只能分发给一台服务器。到目前为止,我已经在三台不同的服务器上进行了测试,其中一台成功,一台Debian,一台Ubuntu,另一台则是我正在开发的Windows机器。

在最终部署服务器,出于某种原因,应用程序部署的罚款,并在每次启动时,运行良好,约3分钟。数据库连接工作,一切运行良好。然而,3分钟后,每次应用程序尝试访问数据库时,我都会始终一致地看到NoClassDefFoundError。

我与他们都打包在WAR文件中的下列库:

的Mysql/J连接器,最新版本 ActiveObjects,0.8.2 Jasorb 1.3 Jython的2.5.1(对于某些脚本) 的Tomcat 6.0.20 mod_python的 阿帕奇

错误:

Exception in thread "Timer-4" java.lang.NoClassDefFoundError: com/mysql/jdbc/SQLError at com.mysql.jdbc.Util.handleNewInstance(Util.java:430) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at net.java.ao.DatabaseProvider.getConnectionImpl(DatabaseProvider.java:771) at net.java.ao.DatabaseProvider.getConnection(DatabaseProvider.java:734) at net.java.ao.EntityManager.find(EntityManager.java:666) at net.java.ao.EntityManager.find(EntityManager.java:607) at net.java.ao.EntityManager.find(EntityManager.java:579) at com.sq.sa.SAPushAlertsTask.run(SAPushAlertsTask.java:32) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462) Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.SQLError at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:138 7) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:123 3) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 13 more

回答

1

无论你的MySQL/J连接器在某种程度上坏了(更可能)你的类路径中有另一个jar文件,它只有一些来自MySQL JDBC驱动程序的类。无论哪种方式,“com/mysql/jdbc/SQLError”类都找不到。

您的应用程序运行罚款的最初几分钟,然后在出现某些错误上面的类不能被加载会抛出异常张贴。检查你的整个类路径(CLASSPATH环境变量+ tomcat的lib + webapp的lib),看看你实际上是否有SQLError,并且b)MySQL JDBC驱动程序不会出现一次以上。

一旦上述是固定的,你会得到这是造成这种情况的一个实际的错误,应该能够把它从那里。

+0

谢谢你的回复。我尝试从我的WAR文件中删除mysql/j连接器并将它移动到tomcat/libs。这将产生一个更大的堆栈跟踪,希望能有用: http://pastie.org/653416 太谢谢你了! – samuraisam 2009-10-13 19:21:43

+0

“这个Web应用程序实例已经停止”消息是高度可疑的 - 你的Web应用程序是否真的被停止了(你可以在tomcat的管理器应用程序中检查)?如果是这样,为什么?那里显然有一些类加载器的问题;将jdbc从war移动到tomcat/libs这一事实改变了这一行为。你的CLASSPATH包含什么(对于你开始使用tomcat的用户)? – ChssPly76 2009-10-13 19:41:53

+0

它变得更奇怪了 - 应用程序甚至没有部署*,而MySQL/j连接器不在tomcat/lib目录中,但是上面的帖子中的堆栈跟踪仍然被转储到tomcat/logs/catalina。出。我的tomcat安装是否被盗用?再次感谢你的帮助! – samuraisam 2009-10-13 19:56:24