#java #hibernate #glassfish #c3p0
#java #спящий режим #glassfish #c3p0
Вопрос:
Моя конфигурация c3p0 выглядит следующим образом, и иногда я получаю следующие сообщения об ошибках в моей консоли. Почему я получаю это?
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
Конфигурация гибернации
частная статическая SessionFactory SessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
System.err.println("in session Facotry");
Configuration configuration = new Configuration();
return configuration.configure().buildSessionFactory(
new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
.build());
} catch (HibernateException ex) {
System.err.println("Initial SessionFactory creation failed." ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
Ошибка
INFO: WARN - Failed to destroy resource: com.mchange.v2.c3p0.impl.NewPooledConnection@67a781cc
30 Jun 2014 11:57:59java.lang.IllegalStateException: This web container has not yet been started
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1652)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1611)
at com.mchange.v2.c3p0.stmt.GooGooStatementCache.synchronousDestroyStatement(GooGooStatementCache.java:413)
at com.mchange.v2.c3p0.stmt.GooGooStatementCache.closeAll(GooGooStatementCache.java:351)
at com.mchange.v2.c3p0.impl.NewPooledConnection.closeAllCachedStatements(NewPooledConnection.java:598)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:468)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:191)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Ответ №1:
Итак, это проблема с загрузчиком классов, вероятно, связанная с устаревшим пулом, который все еще работает, пока приложение повторно загружается. Вот несколько предложений:
-
Убедитесь, что ваш hibernate SessionFactory полностью закрыт () в каком-либо перехватчике, когда ваше приложение завершает работу, например, в SessionContextListener . close() ing SessionFactory должен очистить пул, пока требуемые классы все еще работают. Это лучшее, что можно сделать, потому что, помимо сообщений, которые вы видите, если вы оставляете пулы из старых экземпляров приложений живыми после перезапуска вашего приложения, вы теряете ресурсы (потоки, соединения).
-
Обновитесь до c3p0-0.9.5-pre8 и попробуйте установить
hibernate.c3p0.contextClassLoaderSource
значениеlibrary
. См. http://www.mchange.com/projects/c3p0/#contextClassLoaderSource Обязательно поместите два файла jar c3p0 в каталог библиотеки уровня сервера приложений, а не в каталог, дочерний к файлу war или другому архиву.
Комментарии:
1. Я включил конфигурацию гибернации для вашей справки, что вы подразумеваете, устанавливая hibernate.c3p0 ….. в библиотеку? »
2.
hibernate.c3p0.
может использоваться для установки произвольных параметров конфигурации c3p0 в конфигурации гибернации. таким образом, установкаhibernate.c3p0.contextClassLoaderSource
значенияlibrary
установит этот параметр. что это значит, смотрите По ссылке. (но это новое, вам нужно убедиться, что вы используете c3p0-0.9.5-pre8.)3. вы настроили SessionFactory, но вы когда-нибудь разрушаете его, если ваше приложение повторно загружается? это не похоже на это, и это, скорее всего, ваша проблема. когда вы когда-нибудь звонили
sessionFactory.close()
?