Mysql/j Connector 在 Tomcat 6/JDK 6 下神秘卸载
感谢您抽出时间查看我的问题。
我开发了一个 Java WAR 文件,旨在一次仅分发到一台服务器。到目前为止,我已经在 3 台不同的服务器上进行了成功的测试,一台是 Debian,一台是 Ubuntu,另一台是我正在开发的 Windows 机器。
在最终的部署服务器上,由于某种原因,应用程序部署得很好,并且每次启动时,运行良好大约 3 分钟。数据库连接正常,一切运行正常。然而,3 分钟后,每次应用程序尝试访问数据库时,我开始一致地看到 NoClassDefFoundError。
我将以下库全部打包在 WAR 文件中:
Mysql/j Connecter,最新版本 活动对象,0.8.2 贾索布1.3 Jython 2.5.1(用于某些脚本) 雄猫6.0.20 模组Python 阿帕奇
错误:
线程“Timer-4”中出现异常 java.lang.NoClassDefFoundError: com/mysql/jdbc/SQLError 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:430) 在 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: com.mysql.jdbc.SQLError 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:138 7) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:123 3) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 13 更多
Thank you for taking time to look at my question.
I developing a Java WAR file intended for distribution to only one server at a time. So far, I have tested on 3 different servers with success, one Debian, one Ubuntu and the other, the Windows machine I'm developing on.
On the final deployment server, for some reason the app deploys fine, and upon each startup, runs well for about 3 minutes. Database connectivity works, everything runs fine. After 3 minutes however, I start seeing NoClassDefFoundError's consistently every time the app tries to access the DB.
I'm the following libraries with all of them packaged in the WAR file:
Mysql/j Connecter, latest version
ActiveObjects, 0.8.2
Jasorb 1.3
Jython 2.5.1 (for some scripting)
Tomcat 6.0.20
mod_python
Apache
The error:
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要么您的 MySQL/J 连接器以某种方式损坏,要么(更有可能)您的类路径中存在另一个 jar,其中仅包含 MySQL 的 JDBC 驱动程序中的一些类。无论哪种方式,都找不到“com/mysql/jdbc/SQLError”类。
您的应用程序在前几分钟运行良好,然后当发生某些错误时,无法加载上述类,从而引发发布的异常。检查您的整个类路径(CLASSPATH env.variable + tomcat的lib + webapp的lib)并查看是否a)您实际上确实有SQLError并且b)MySQL JDBC驱动程序不会出现多次。
修复上述问题后,您将收到导致此问题的实际错误,并且应该能够从那里解决该错误。
Either your MySQL/J connector is somehow broken OR (more likely) you have another somewhere jar in your classpath that has only some of the classes from MySQL's JDBC driver. Either way, "com/mysql/jdbc/SQLError" class can't be found.
Your application runs fine the first few minutes, then when some error occurs the above class can't be loaded which throws the exception as posted. Check your entire classpath (CLASSPATH env. variable + tomcat's lib + webapp's lib) and see whether a) you actually do have SQLError in it and b) MySQL JDBC driver does not occur more than once.
Once the above is fixed, you'll get an actual error that's causing this and should be able to take it from there.