c3p0 - спящий режим - mysql - PullRequest
       5

c3p0 - спящий режим - mysql

1 голос
/ 20 декабря 2011
  • hibernate 3.6.8 final
  • банка c3p0, входящая в комплект hibernate 3.6.8 -> c3p0-0.9.1.jar

    1 15 40 0 ​​52

Приложение работает нормально, однако я получаю массивные вызовы журнала со следующей трассировкой стека:

org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException.  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 java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2411)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor38.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:152)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1074)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1061)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1796)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:620)

Любая информация о том, как удалить этот журнал INFOбыло бы очень полезно, спасибо!

ОБНОВЛЕНИЕ: Это критическая ошибка?Или я должен просто проигнорировать это?

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

После поиска в сети по этой проблеме я обнаружил некоторые похожие проблемы, о которых сообщили несколько человек. Все они указывают на общую проблему: потоки. По сути, если вы запускаете новые потоки в своем приложении (либо в своем коде, либо с помощью стороннего инструмента, такого как Quartz), вы должны убедиться, что все потоки остановлены надлежащим образом, когда приложение удалено с сервера. Здесь Вот некоторые цитаты из поисков:

Николай Рыдзевский написал :

Похоже, что после удаления экземпляра webapp фоновый кварцевый поток хочет что-то сделать, и тогда возникает исключение.

Другое (и лучшее объяснение) на jspwiki.org :

Возможно, это связано с неудачной перезагрузкой веб-приложения Tomcat. Приложение выгружено, но все потоки не закрываются должным образом. В результате, когда потоки пытаются работать, они сталкиваются с тем фактом, что Tomcat выключил загрузчик классов, и регистрируется ошибка.

Итак, чтобы решить эту проблему, вы должны убедиться, что все потоки, запущенные вашим приложением, будут остановлены при отмене развертывания приложения (или повторном развертывании, это то же самое). Вы можете сделать это, зарегистрировав ServletContextListener на сервере приложений и остановив свои потоки внутри метода contextDestroyed(ServletContextEvent).

0 голосов
/ 20 декабря 2011

ОК, я перешел на boneCP, c3p0 на самом деле не работает для java6 !!!

0 голосов
/ 20 декабря 2011

Если вы используете log4j, измените свои настройки ведения журнала на что-то вроде этого (слово ERROR заменяет INFO):

log4j.rootLogger=ERROR, file, stdout
log4j.logger.org.hibernate=ERROR

Они находятся в файле log4j.properties в проекте yr.

...