4

我已经使用 apache CXF 实现了一个 Rest Web 服务,并且我已经设置了org.apache.tomcat.jdbc.pool.

一切似乎工作正常,我的连接池工作,但我不断收到与PoolCleaner. 问题是我找不到有关何时发生此异常的特定模式。这对我来说似乎是随机的,有时它与以前不同。有时在我启动 tomcat 时发生,有时在我访问或部署 Web 应用程序时发生。

所以这是我得到的例外情况

大多数时候我得到这个:

Exception in thread "PoolCleaner[28224875:1372776292150]" java.lang.NullPointerException
    at org.apache.tomcat.jdbc.pool.ConnectionPool.unregisterCleaner(ConnectionPool.java:1296)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.access$400(ConnectionPool.java:57)
    at org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.stopRunning(ConnectionPool.java:1364)
    at org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.run(ConnectionPool.java:1341)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

有时我得到这个

INFO: Illegal access: this web application instance has been stopped already.  Could not load org.apache.tomcat.jdbc.pool.FairBlockingQueue$FairIterator.  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:1566)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.tomcat.jdbc.pool.FairBlockingQueue.iterator(FairBlockingQueue.java:233)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.testAllIdle(ConnectionPool.java:1034)
    at org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.run(ConnectionPool.java:1352)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

Exception in thread "PoolCleaner[6345204:1372865832250]" java.lang.NoClassDefFoundError: org/apache/tomcat/jdbc/pool/FairBlockingQueue$FairIterator
    at org.apache.tomcat.jdbc.pool.FairBlockingQueue.iterator(FairBlockingQueue.java:233)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.testAllIdle(ConnectionPool.java:1034)
    at org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.run(ConnectionPool.java:1352)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.jdbc.pool.FairBlockingQueue$FairIterator
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    ... 5 more

关于为什么会发生这种情况的任何想法?如何追踪其根本原因?我该如何解决?

谢谢

4

4 回答 4

1

这会因为缺少 jar 文件或 jar 文件的版本被更改而发生..

花了一天后,我得到了解决方案。

于 2014-06-17T09:57:50.047 回答
0

大多数情况下,这是一个后续错误,类似“ org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors ”可以在catalina.out中找到。

然后最好在文件localhost.log中的 tomcat /logs 目录中找到先前的错误。

于 2015-01-19T13:03:05.337 回答
0

当数据库迁移脚本包含另一个迁移脚本时,我在 grails 中发生此错误,但该文件丢失(例如 grails-app/migration/dbchanges.groovy 包含 grails-app/migration/changelog-1.0.0.groovy,但 changelog -1.0.0.groovy 已被删除)。更新 dbchanges.groovy 修复了它。

于 2016-06-08T21:05:50.377 回答
0

我通过执行以下步骤(在 Eclipse Mars 中)解决了它,

  1. 清理tomcat工作目录
  2. 清理项目并让它构建/部署
  3. 重启服务器

我不知道这是否是偶然的,但在徒劳的调试和检查 jar 版本之后它对我有用。

于 2016-05-02T09:42:06.727 回答