powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate JPA re-connect
17 сообщений из 17, страница 1 из 1
Hibernate JPA re-connect
    #38341370
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, если что, найду сам, но всё же, если знаете "с верха головы"...

Как автоматически реконнектится к БД?
В приложении всё на JPA (в hibernate-реализации), т.е. сам практически не управляешь всем этим процессом, всё на автомате.
Но если что -- соединение рвётся и навсегда. Надо перезапускать программу.

Логично предположить, что должен быть предусмотрен какой-то автоматический механизм восстановления соединения.

Нашёл пока какой-то:

hibernate.connection.autoReconnect=true

но пока не знаю, что там к чему.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38341383
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от пула содеинений (DataSource). В JEE лучше всего настраивать пул на сервере. В пуле настраивается превалидация соединений. Если пул обнаруживает ошибку, то он пытается пересоздать соединение, не выкидывая ошибок.
Пул внутри hibernate лучше не использовать. Он нужен больше для тестовых целей.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38341819
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Не понял нифига из твоих посылов.
На каком сервере? У меня обычное приложение, демон.

Почему пул внутри Hib нельзя использовать?
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38341964
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе понял нифига из твоих посылов.

Бывает.

MasterZivНа каком сервере? У меня обычное приложение, демон.

В Java "обычное приложение" это .war модуль, который хостится в контейнере (сервере).
Всё остальное имеет смысл указывать и описывать более детально.
JPA это тоже часть JEE, которая обычно работает внутри JEE контейнера.

MasterZivПочему пул внутри Hib нельзя использовать?
Там c3p0. На него были как-то нарекания. Можно поискать в гугле.
Например тут пишут про
http://www.databasesandlife.com/automatic-reconnect-from-hibernate-to-mysql/
c3p0.testConnectionOnCheckout=true

Покажите свой конфиг.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38342008
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMasterZivНе понял нифига из твоих посылов.

Бывает.

MasterZivНа каком сервере? У меня обычное приложение, демон.

В Java "обычное приложение" это .war модуль, который хостится в контейнере (сервере).
Всё остальное имеет смысл указывать и описывать более детально.
JPA это тоже часть JEE, которая обычно работает внутри JEE контейнера.

MasterZivПочему пул внутри Hib нельзя использовать?
Там c3p0. На него были как-то нарекания. Можно поискать в гугле.
Например тут пишут про
http://www.databasesandlife.com/automatic-reconnect-from-hibernate-to-mysql/
c3p0.testConnectionOnCheckout=true

Покажите свой конфиг.

Ладно, спасибо за помощь, я всё это
автор"В Java "обычное приложение" это .war модуль, который хостится в контейнере (сервере).
Всё остальное имеет смысл указывать и описывать более детально.
JPA это тоже часть JEE, которая обычно работает внутри JEE контейнера."

уже понял, и понял, что мне надоело рыться в ворохе этих спецификаций, и интеграции ещё одного модуля (коннекшн пула) я уже не выдержу. Времени нет.
Сделал просто и ясно -- при сбое приложение тупо перестартовывает с нуля, повторяет всё инициализацию.
(естественно, JVM не рестартует).

В общем, особенно ничего не теряется в смысле производительности -- всё равно надо переконнекчиваться к БД.
Контекста особенно никакого в приложении нет, так что ничего не теряется.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38342362
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вот:

Код: plaintext
1.
2.
3.
4.
5.
6.
derImpl: DriverManagerConnectionProviderImpl.java:96 - HHH000402: Using Hibernate built-in connection pool (not for production use!)
derImpl: DriverManagerConnectionProviderImpl.java:130 - HHH000115: Hibernate connection pool size: 20
derImpl: DriverManagerConnectionProviderImpl.java:133 - HHH000006: Autocommit mode: true
derImpl: DriverManagerConnectionProviderImpl.java:147 - HHH000401: using driver [org.gjt.mm.mysql.Driver] at URL [jdbc:mysql://applog/loggy]
derImpl: DriverManagerConnectionProviderImpl.java:152 - HHH000046: Connection properties: {autoReconnect=true, user=loggyboy, password=****, autocommit=true, release_mode=auto}


Т.е. эта сволочь и пул имеет, и autoReconnect=true поняла, но нифига не переконнекчивается.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38342412
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКстати, вот:
Код: plaintext
1.
Using Hibernate built-in connection pool (not for production use!)

Кстати, я об этом писал выше.

MasterZiv
Код: plaintext
1.
Connection properties: {autoReconnect=true, user=loggyboy, password=****, autocommit=true, release_mode=auto}

Т.е. эта сволочь и пул имеет, и autoReconnect=true поняла, но нифига не переконнекчивается.
Вы бы не чурались заглядывать в мануал. А там, между прочим, написано
RTFMhibernate.connection.<propertyName> - Pass the JDBC property <propertyName> to DriverManager.getConnection().
То есть он просто передаёт это свойство в JDBC драйвер. А использует это свойство, на сколько я понимаю, только MySQL. Для чего использует - можно найти в мануале MySQL.

Всё в том же мануале можно почитать и про c3p0
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html C3P0 is an open source JDBC connection pool distributed along with Hibernate in the lib directory. Hibernate will use its org.hibernate.connection.C3P0ConnectionProvider for connection pooling if you set hibernate.c3p0.* properties. If you would like to use Proxool, refer to the packaged hibernate.properties and the Hibernate web site for more information.
Исходя из чего сделать вывод, что нужно вам указать
hibernate.c3p0.testConnectionOnCheckout=true
Возможно и некоторые другие свойства, которые стоит поискать в мануале для c3p0.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344069
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо за всё.
Но я пока не использую c3p0.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344082
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, чтобы добить тему. Может кому-то и будет полезно.

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
и
http://stackoverflow.com/questions/667289/why-does-autoreconnect-true-not-seem-to-work

autoReconnect... If enabled the driver will throw an exception for a queries issued on a stale or dead connection, which belong to the current transaction, but will attempt reconnect before the next query issued on the connection in a new transaction. ...


Т.е. вместо одного ожидаемого (мною в частности) поведения "крутись как хочешь, а мой запрос выполни", они реализуют поведение
"сейчас не удалось, но в следующий раз мы не оплошаем". Они правы, что, чтобы реализовать ожидаемое мною поведение, приложение должно быть к этому готово -- должно особым образом обрабатывать транзакции, а именно -- один запрос, одна транзакция.

Мне лично вариант, реализованный в драйвере MySQL и так бы не подошёл.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344120
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСпасибо за всё.
Но я пока не использую c3p0.
А что же вы тогда используете, интересно знать. Если c3p0 используется в хибере по-умолчанию?
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344357
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMasterZivСпасибо за всё.
Но я пока не использую c3p0.
А что же вы тогда используете, интересно знать. Если c3p0 используется в хибере по-умолчанию?

Не понял. Проверю.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344365
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как проверить, что используется ?
Отдельно библиотеки (JAR) c3p0 у меня нет, в библиотеках hiber-а классов его тоже не нашёл.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344418
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА как проверить, что используется ?
Отдельно библиотеки (JAR) c3p0 у меня нет, в библиотеках hiber-а классов его тоже не нашёл.
Хм. Может я ошибся. Завтра исходники посмотрю.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38344695
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, действительно, у хибернейта сейчас реализован свой примитивный пул в DriverManagerConnectionProvider.
c3p0 был дефолтным, вероятно, только в версиях 2.x
Поэтому единственный способ добится желаемого поведения, это таки добавить реализацию пула в проект.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38345362
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо.

Не, ну уж на фиг. Оставим так. Тем более, что логика так лучше.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38346095
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал такую штуку, но задачу нельзя назвать тривиальной. Тоже для процесса демона который перелопачивает кучу данных.
1) Пул соединений с возможностью восстановления. C3P0 действительно имеет проблемы, я использовал BoneCp. Он и пинговать соединение может, и переустонавливает при ошибках. Но тоже по принципу "сейчас не получилось, но вот в следующий раз..."
2) Все Exception от базы данных транслируются в 2 типа: recoverable/unrecoverable. Например, потерю сетевого соединения или таймаут рассматриваем как восстановимые. Идея взята из Spring, но их транслятор модифицирован для разбора на 2 такие категории.
3) Вызовы к методам которые работают с базой обернуты в блок который ловит exception и в случае восстановимого ждет некоторое время и пытается вызвать метод повторно. Если после нескольких попыток все еще ошибка, бросаем "все пропало" дальше... Это сделано как Guice Interceptor.
Естественно, метод который пытаемся вызвать несколько раз должен быть без сторонних эффектов в случае rollback.
Система получилась пуленепробиваемой. Можно выдернуть сетевой кабель или перегрузить SQL сервер - ругается в логи, но как только соединение восстанавливается продолжает работу как ни в чем не бывало.
...
Рейтинг: 0 / 0
Hibernate JPA re-connect
    #38346195
Ronib3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь этот геморой с реконектами уходит если собирать такие приложения в Тануки http://wrapper.tanukisoftware.com/doc/english/download.jsp

Грузит приложения как сервисы и перегружает приложения если сбои по сети. По вашему описанию у вас микрософт на сетке, так что пользуйте тануки как сервис - все потом в автомате если даже ошибки валятся после каждого второго запроса.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate JPA re-connect
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]