![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Vasay |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Доброго всем времени.
Продолжаю разбираться с JPA. Наткнулся на такую проблему: Деплою приложение - все ок. Проходит какое-то время - начинает выскакивать ошибка:
порылся по инету, ничего толком не нашел :( Понимаю, что пул отваливается по таймауту. В логе сервера:
71 строчка в useradd - em.getTransaction().begin(); где em - экзэмпляр EntityManager Мой mysqlPool.sun-resource:
Файл создавался NETBeans, и я не знаю что такое: idle-timeout-in-seconds="300" и max-wait-time-in-millis="60000", но, чувствую, что это имеет отношение к проблеме... -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
||||||
|
|||||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Проблема известная, заключается в том, что по таймауту сервер MySQL отваливает соединение, не извещая об этом клиента. С помощью idle-timeout-in-seconds и max-wait-time-in-millis это не настраивается. И насколько я знаю вообще никак не настраивается. Решение - использование пула, который умеет мониторить состояние соединения, посылая периодически запросы к серверу. Например, Apache DBCP можно использовать.
Добавлено через 9 минут и 42 секунды Вероятно еще добавление autoReconnect=true в JDBC URL может помочь, но насколько я помню работает такая опция не всегда. |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Спасибо за информацию. Правда, у меня один проект с этим пулом и MySQL (правда без JPA и Hibernate) уже 4 месяца UP-time, похоже дело в настройках... Насчет autoReconnect=true, я думаю лучше не в юрл, а в mysqlPool.sun-resource добавить <property name="autoReconnect" value="true"/>? -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Нет, дело скорее всего в пуле Hibernate, у него есть свой встроенный, который используется по умолчанию. Отключить его нельзя, только что-то взамен использовать. |
|||
|
||||
Vasay |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Похоже, я чего-то не понимаю. Я создаю пул соединений на сервере (SUN Java App Server). Создаю JDBC Resources для этого пула (допустим, его имя "_MySQLRes"). В приложении без Hibernate и Jpa я использую:
И все ОК. При использовании JPA Hibernate, я создаю persistence.xml
И часа через 3 вылетает вышеуказанная ошибка. При чем тут пул Hibernate? ![]() -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
||||
|
|||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Создал пул с использованием DBCP - все равно вылетает!!!
SOS !!! не понимаю, что за бред.... Хотя, может дело в том, что отлаживаю я на локальном сервере (чтоб лишний раз не мучать SJAS (Sun java app server), а то когда дебагишь на удаленном, он иногда виснет), а бд у меня на удаленном... т.е. получается что бд вобще не может ничего послать SJAS не может, ибо у меня NAT??? -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Собственно, я сначала не заметил, что JNDI используется. Дело очевидно все-таки в пуле, но том, который используется на сервере приложений. Причина та, что я уже описывал. Посмотри, пожалуйста в настройках источника данных сервера, можно ли там задать возможность периодического опроса соединения. Это должны быть два параметра - текст запроса, который будет посылаться через соединение для поддержки его в актуальном состоянии (например, "select 1") и интервал времени, через которое пул будет это делать. Этот интервал должен быть меньше того времени, через которое сервер отваливает соединения. К сожалению Sun AS у меня нет, посмотреть не могу. В общем такое решение должно помочь.
|
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Вобщем, все вроде ОК.
Похоже проблема была в том, что app server находился во внутренней сети (не имел своего собственного ip-a в интернете), а сервер с БД во внешней (internet). Поставил app server на тотже сервер, где и БД, коннект больше не рвет. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Опять отвалился :(
Может, кто-нибудь приведет пример рабочих настроек JPA - MySQL (не обязательно hibernate)?
Увы, такого не нашел :( -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Зато я нашел. ![]() Connection Validation. Select the Required checkbox to enable connection validation. Validation Method. The application server can validate database connections in three ways: auto-commit, metadata, and table.
On Any Failure. If you select the checkbox labelled Close All Connections, if a single connection fails, then the application server closes all connections in the pool and then reestablish them. If you do not select the checkbox, then individual connections are reestablished only when they are used. Сделай следующее: включи валидацию, поставь метод валидации table и задай имя какой-нибудь существующей таблицы с небольшим количеством записей. Собственно, тогда и получится то, что я предлагал. |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Уже больше суток работает!
Спасибо tux!!! Еще +1, за то что не поленился, посмотрел доки SJAS и ткнул меня носом в нужное место! -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
А мое исключение не из той же оперы? Вываливаеться если открыть страницу сайта и через пол часа перейти в нем по какой-нибудь ссылке.
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
а можешь код привести, где с транзакциями работаешь?
-------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
Странно...
Он у тебя сыпится на rollback.... Судя по коду entityManager жив. У тебя работа entityManager как построена? Вполне возможно проблема тоже связана с MySQL. Если раз в 10 мин кликать на страницу, то через полчаса еще все работать будет? -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |