为什么从/管理器重新启动应用程序导致一系列“此Web应用程序实例已经停止。”警告。为什么?

时间:2016-05-12 18:37:55

标签: java oracle hibernate tomcat c3p0

Tomcat 7安装w / jvm 1.7 加载了几个webapps。 在受影响的应用程序上运行Hibernate 3.3 w / c3p0连接池 Quartz 1.8.3作业在受影响的应用程序上运行。

如果我从/ manager控制台重新启动一个Web应用程序,我的catalina就会开始填写这样的东西:

信息:非法访问:此Web应用程序实例已经停止。无法加载org.hsqldb.jdbc.JDBCDriver。最终跟随堆栈跟踪是由于为调试目的而抛出的错误以及尝试终止导致非法访问的线程引起的,并且没有功能影响。 java.lang.IllegalStateException     在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1610)     在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Unknown Source)     在java.sql.DriverManager.isDriverAllowed(未知来源)     at java.sql.DriverManager.getDrivers(Unknown Source)     at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:317)     在com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)     在com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)     在com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)     在com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)     在com.mchange.v2.resourcepool.BasicResourcePool.access $ 800(BasicResourcePool.java:32)     在com.mchange.v2.resourcepool.BasicResourcePool $ AcquireTask.run(BasicResourcePool.java:1810)     在com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

最奇怪的是,我并没有尝试运行任何调用hsqldb的东西,而是试图触摸oracle数据库。无论如何,一旦我在日志中看到这种行为,oracle环境开始被登录请求轰炸,listener.log开始填满,最终DBA正在尖叫着我的流程。

如果我整个重新启动应用程序服务器,这一切都不会发生,一切都很好。

发生了什么事?非常感谢任何见解。

2 个答案:

答案 0 :(得分:1)

  1. 请参阅http://www.mchange.com/projects/c3p0/#configuring_to_avoid_memory_leaks_on_redeploy
  2. 如果要在Web应用程序中启动c3p0连接,则必须注意在取消部署应用程序时正确关闭()。 ServletContextListener是处理连接池初始化和销毁​​的好地方。

答案 1 :(得分:0)

我认为我需要更加努力地摧毁一些线程。会在那里捅一下,看看我是否可以让它发挥作用。谢谢。