1

感谢您花时间看我的问题。

我开发了一个 Java WAR 文件,旨在一次仅分发到一台服务器。到目前为止,我已经成功地在 3 台不同的服务器上进行了测试,一台是 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 Apache

错误:

线程“Timer-4”中的异常 java.lang.NoClassDefFoundError: com.mysql.jdbc.Util.handleNewInstance(Util.java:430) 处的 com/mysql/jdbc/SQLError 在 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl .java:352) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284) 在 java.sql.DriverManager.getConnection(DriverManager.java:582) 在 java.sql.DriverManager.getConnection(DriverManager.java: 185) 在 net.java.ao.DatabaseProvider.getConnectionImpl(DatabaseProvider.java:771) 在 net.java.ao.DatabaseProvider.getConnection(DatabaseProvider.java:734) 在 net.java.ao.EntityManager.find(EntityManager.java :666) 在 net.java.ao.EntityManager.find(EntityManager.java:607) 在 net.java.ao.EntityManager.find(EntityManager.java:579)在 com.sq.sa.SAPushAlertsTask.run(SAPushAlertsTask.java:32) 在 java.util.TimerThread.mainLoop(Timer.java:512) 在 java.util.TimerThread.run(Timer.java:462) 引起作者:java.lang.ClassNotFoundException: org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:138 7) 处的 com.mysql.jdbc.SQLError org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader. java:123 3) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 13 更多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更多的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更多的

4

1 回答 1

1

要么您的 MySQL/J 连接器以某种方式损坏,要么(更有可能)您的类路径中有另一个 jar,其中只有一些来自 MySQL 的 JDBC 驱动程序的类。无论哪种方式,都找不到“com/mysql/jdbc/SQLError”类。

您的应用程序在前几分钟运行良好,然后当发生一些错误时,无法加载上述类,这会引发发布的异常。检查您的整个类路径(CLASSPATH 环境变量 + tomcat 的 lib + webapp 的 lib)并查看 a)您是否确实在其中有 SQLError 和 b)MySQL JDBC 驱动程序不会多次出现。

一旦上述问题得到修复,您将得到一个导致此问题的实际错误,并且应该能够从那里得到它。

于 2009-10-13T19:12:44.953 回答