
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
04.02.2015, 15:32
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Добрый день! Есть hibernate. Есть сеть. Создаю фактори как Код: sql 1. 2. 3. Иногда связь с сервером БД падает. Надо, соответственно, пересоздать sessionFactory. Вопрос - как? Я сделал обёртку, Код: sql 1. 2. 3. 4. 5. 6. По идее получается, что надо каждое обращение к БД обернуть в Код: sql 1. 2. 3. 4. 5. 6. Но как-то это выглядит тоскливо. Можно ли при закрытии сессии (session.close()) узнать, в каком она состоянии, и если было возбуждено JDBCConnectionException сбрасывать фактори? Как это делается? PS: а если голый JDBC? А если коннект к MongoDB? Как это делать красиво? -- Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.02.2015, 15:50
|
|||
|---|---|---|---|
hibernate и восстановление после сбоя сети |
|||
|
#18+
Alexey Tomin, пробовал ничего не делать? При падении сети? По умолчанию кэш второй не включен. А сессия открыта только на момент запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.02.2015, 16:04
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Petro123пробовал ничего не делать? Конечно пробовал. Бывало сутки висело (на выходные коннект отпадал). Любая попытка работы приводит к тому, что sessionFactory.openSession() отрабатывает, но попытка использовать эту сессию приводит к ошибке Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.02.2015, 16:48
|
|||
|---|---|---|---|
hibernate и восстановление после сбоя сети |
|||
|
#18+
Alexey TominБывало сутки висело (на выходные коннект отпадал). я не очень понял, что именно висело. Если у вас длинные транзакции и коннект постоянный, то autoReconnect=true Если у вас короткие, на момент rest запроса, то проверьте всё ли закрывается после запроса....отдаётся ли в пул коннект и т.д. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.02.2015, 16:55
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Alexey TominИногда связь с сервером БД падает. Надо, соответственно, пересоздать sessionFactory. Это заблуждение. Используйте DataSource с валидацией и пересозданием соединений. ORM отношения к соединению с базой не имеет. SessionFactory пересоздавать не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.02.2015, 16:57
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Petro123Если у вас короткие, на момент rest запроса, то проверьте всё ли закрывается после запроса....отдаётся ли в пул коннект и т.д. IMHO Короткие. Всегда коннект закрываю через session.close() - но это ж пулл, реально коннекты висят. Пробую автопереоткрытие сделать. К меня настройки в properties-файле Код: sql 1. 2. 3. 4. 5. ... Добавляю Код: sql 1. 2. 3. Не помогает c3p не использую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 09:07
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Надо взять нормальный пул с нормальными настройками. У меня highload нет, поэтому Apache DBCP устраивает по всем параметрам. Рекомендую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 09:10
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Пока такое решение нарисовалось: Добавил класс SessionProvider. Вся работа с БД - через методы вида Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Соответственно в этих методах всё- и удаление фактори при ошибке, и можно встроить проверку валидности через "select 1 from dual" какой-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 10:18
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
BlazkowiczЭто заблуждение. Используйте DataSource с валидацией и пересозданием соединений. ORM отношения к соединению с базой не имеет. SessionFactory пересоздавать не нужно. +100 . Делали приложение, что то вроде ETL - в несколько потоков перелопачивает кучу данных. Использовался пул bonecp, и Guice JPA ( со Spring или ручным созданием сессии все точно так же ). Метод где происходит создание/завершение сессии и транзакция оборачивался интерцептором который в случае восстановимых ошибок ( по типу и содержимому Exception ) ждал некоторое время и повторял вызов метода. С ограничениями на максимальное время повторов и увеличивающимися интервалами. Очень эффектно : выдрать сетевой кабель - приложение начинает поругиваться. После возвращения кабеля на место работает как ни в чем ни бывало. Естественно, код надо писать так чтобы его можно было вызывать многократно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 12:42
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Alexey TominПока такое решение нарисовалось: Хрень типа спринговых *Template классов, который Кинг всё время хаял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 13:18
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
BlazkowiczНадо взять нормальный пул с нормальными настройками. У меня highload нет, поэтому Apache DBCP устраивает по всем параметрам. Рекомендую. А где у него кнопка? Т.е. как его настроить на самовосстановление? И как его подсунуть под hibernate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 14:00
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
Alexey Tomin, http://commons.apache.org/proper/commons-dbcp/configuration.html testOnBorrow и все что рядом. У вас хибер на томкате или на чем живет? В контейнере лучше настраивать DataSource на уровне контейнера и использовать его через JNDI. Если контейнера нет, то в гугле масса рецептов по прямой интеграции: http://www.mkyong.com/hibernate/how-to-configure-dbcp-connection-pool-in-hibernate/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2015, 14:01
|
|||
|---|---|---|---|
hibernate и восстановление после сбоя сети |
|||
|
#18+
Есть дажа проприетарные пулы типа Oracle-OCP. Они умеют слушать серверы и реагировать на падения узлов в кластере и прочие события которые могут быть важны для подключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.02.2015, 15:57
|
|||
|---|---|---|---|
|
|||
hibernate и восстановление после сбоя сети |
|||
|
#18+
BlazkowiczЕсли контейнера нет, то в гугле масса рецептов по прямой интеграции: http://www.mkyong.com/hibernate/how-to-configure-dbcp-connection-pool-in-hibernate/ Да, дошли руки- сделал. Спасибо, dbcp2 хорошо лёг под hibernate и коннект восстановился. Код в примере, правда, устарел, ну да это мелочи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2125832]: |
0ms |
get settings: |
11ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
551ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 871ms |

| 0 / 0 |
