Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сайт на Hibernate периодически падает, как спастись от JDBCConnectionException? 
:(
    Опции темы
ochnev
Дата 24.3.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



Работает сайт на сервлетах и использованием Hibernate.
Раз в пару дней при открытии любой страницы появляется ошибка, org.hibernate.exception.JDBCConnectionException:

Цитата

org.apache.jasper.JasperException: could not execute query
...

root cause 

org.hibernate.exception.JDBCConnectionException: could not execute query
    org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
    org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    org.hibernate.loader.Loader.doList(Loader.java:2223)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    org.hibernate.loader.Loader.list(Loader.java:2099)
    org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:811)
...


Ещё в некоторых случаях появляется такое сообщение (ниже в списке exception'ов):

Цитата

root cause 

com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:


** BEGIN NESTED EXCEPTION ** 

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe


Почему постоянно рвётся соединение с базой данных?
Что с этим делать?
Перезапускать Tomcat по cron'у - в принципе можно, но это не дело.

Раньше очень похожая проблема была, понадобилось приделать connection pool, вроде стало работать нормально, но всех проблем это не решило.
Вот фрагмент hibernate.cfg.xml (у меня вообще правильно connection pool настроен?):

Код

        <property name="connection.pool_size">0</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>

        <property name="c3p0.max_size">5</property>
        <property name="c3p0.min_size">1</property>
        <property name="c3p0.timeout">3000</property>
        <property name="c3p0.max_statements">100</property>
        <property name="c3p0.idle_test_period">300</property>
        <property name="c3p0.acquire_increment">2</property>


Возможно, дело не только в конфигах, но и в том, как я вообще использую Hibernate API. Наверное, я тут ещё напишу ещё об этом.

Заранее благодарен за подсказки.


Это сообщение отредактировал(а) ochnev - 24.3.2008, 14:29
PM MAIL   Вверх
Llucas
Дата 25.3.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 29.11.2006
Где: Одесса

Репутация: нет
Всего: нет



Может по тайм-ауту у тебя заканчивается сессия...
PM MAIL WWW   Вверх
nogoody
Дата 3.6.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 12.9.2007
Где: Смоленск

Репутация: нет
Всего: нет



У меня такая же проблема... вроде бы надо ковыряться с настройками пула c3p0... но сам эту проблему не решил.. если найдешь ответ отпишись плиз
PM MAIL   Вверх
powerOn
Дата 3.6.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



не знаю поможет ли, но посмотрите вот эту статью: Open Session in View


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
koba
Дата 12.6.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2008

Репутация: 1
Всего: 2



Вот решение: Hibernate broken pipe
PM MAIL   Вверх
ochnev
Дата 12.6.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



Цитата(koba @ 12.6.2008,  00:31)
Вот решение: Hibernate broken pipe

Кажись работает.
Сейчас сделал как в рецепте, локально запустил сайт, подождал час, перегрузил страницу, - не упало.

Вот тот волшебный кусок с параметрами, которые я когда-то почему-то не увидел в доках:
Цитата

        <!-- Connection auto reconnect after long inactivity -->
        <property name="connection.autoReconnect">true</property>
        <property name="connection.autoReconnectForPools">true</property>
        <property name="connection.is-connection-validation-required">true</property>


Кто ещё это решение пробовал, - у всех всё нормально?

PM MAIL   Вверх
ochnev
Дата 16.6.2008, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



Только что опять увидел эту ненавистную ошибку.
Сайт после применения предложенного рецепта долго работал нормально, ошибки не возникало, а сейчас опять.

Надёжного решения не существует?

PM MAIL   Вверх
skhilkov
Дата 16.6.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 2
Всего: 7



У меня такая проблема была. Может даже еще пост старый сохранился. Решение мне помогло следующее - перешел на DBCP.


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
necromancer
Дата 16.6.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 317
Регистрация: 26.7.2006
Где: Москва

Репутация: 6
Всего: 7



может проблема в волшебных пузырьках?
может стоит увеличить время ожидания соединения в базе? 
или радикально уменьшить время пинга в хибернате?



--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
ochnev
Дата 17.6.2008, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



Цитата(necromancer @ 16.6.2008,  14:03)
может стоит увеличить время ожидания соединения в базе? 

Как это делается в MySQL?
Я сейчас просмотрел my.ini, не нашёл ничего похожего на такую натсройку. Какой параметр туда добавить надо?

Добавлено через 4 минуты и 10 секунд
Цитата(skhilkov @ 16.6.2008,  13:15)
У меня такая проблема была. Может даже еще пост старый сохранился. Решение мне помогло следующее - перешел на DBCP.

Помню, была здесь такая тема, я её читал.
Но ведь Hibernate 3-й не работает с DBCP. Там соответствующий ConnectionProvider (если я правильно помню) в дистрибутов Hibernate не включён, а сторонняя поделка имеет столько глюков, что использование её вообще не рекомендуется.

PM MAIL   Вверх
necromancer
Дата 17.6.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 317
Регистрация: 26.7.2006
Где: Москва

Репутация: 6
Всего: 7



Цитата(ochnev @  17.6.2008,  08:36 Найти цитируемый пост)
Как это делается в MySQL?Я сейчас просмотрел my.ini, не нашёл ничего похожего на такую натсройку. Какой параметр туда добавить надо?

немножечко погуглив нашел:
http://dev.mysql.com/doc/refman/5.0/en/con...properties.html



--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
ochnev
Дата 25.6.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



Я стал сильно подозревать, что дело в особенностях конфигурации системы.
Дома я проверил предложенный рецепт, локально под Windows XP всё работает. Ещё на одном сервере под Windows 2003 Server немного попробовал - вроде тоже всё нормально.
А под Linux у меня стоит DirectAdmin (на боевом сервере), и он как-то хитро-сложно вмешивается в работу всей системы. Смутно помню, вроде я не мог остановить mysqld из шелла, а только средствами DirectAdmin. В общем, у меня подозрения, что DirectAdmin что-то делает с mysqld, и тот рвёт соединения и восстанавливать их не хочет.
Думаю, что теперь делать.
Может быть, workaround какой-нибудь сделать, - отлавливать org.hibernate.exception.JDBCConnectionException и программно восстанавливать соединение (осталось разобраться как это сделать)?


Это сообщение отредактировал(а) ochnev - 25.6.2008, 09:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1239 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.