Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate JPA re-connect / 17 сообщений из 17, страница 1 из 1
23.07.2013, 21:47:40
    #38341370
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
Конечно, если что, найду сам, но всё же, если знаете "с верха головы"...

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

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

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

hibernate.connection.autoReconnect=true

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

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

Почему пул внутри Hib нельзя использовать?
...
Рейтинг: 0 / 0
24.07.2013, 12:52:55
    #38341964
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
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
24.07.2013, 13:19:01
    #38342008
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
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
24.07.2013, 15:38:54
    #38342362
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
Кстати, вот:

Код: 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
24.07.2013, 16:02:11
    #38342412
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
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
25.07.2013, 17:28:23
    #38344069
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
Blazkowicz,

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

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
25.07.2013, 17:51:20
    #38344120
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
MasterZivСпасибо за всё.
Но я пока не использую c3p0.
А что же вы тогда используете, интересно знать. Если c3p0 используется в хибере по-умолчанию?
...
Рейтинг: 0 / 0
25.07.2013, 21:01:51
    #38344357
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate JPA re-connect
BlazkowiczMasterZivСпасибо за всё.
Но я пока не использую c3p0.
А что же вы тогда используете, интересно знать. Если c3p0 используется в хибере по-умолчанию?

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

Спасибо.

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

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


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