![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
neonfly |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 31.8.2009 Репутация: нет Всего: нет |
Запускаю программу. Через некоторое время, скажем, 5 часов или больше, все коннекты разрываюся. Если сделать запрос к базе, выходит такая ошибка:
В чем может быть проблема? Кто сталкивался или у кого какие мысли? Это сообщение отредактировал(а) neonfly - 22.10.2009, 16:09 |
||||
|
|||||
dementiev |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 8.2.2008 Где: Минск Репутация: нет Всего: 1 |
без пулла всё работает?
|
|||
|
||||
ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
Если честно - какой то странный у вас пул... Вы сразу открываете все соединения, никогда и нигде их не разрываете (по крайней мере я этого не увидел). Когда вам нужно вы берете из списка первый неиспользуемый коннект. Нет никакой гарантии, что сервер к моменту обращения за соединением (скажем через несколько часов) - не сбросил соединение.
Если уж так охота создать свой пул (хотя пакетов для этого туча) - я бы написал пул так: 1) Создаем некую обертку вокруг Connection а ля PooledConnection 2) Далее пишем обертку вокруг всех вызовов JDBC использующих Connection, так чтобы они использовали мой PooledConnection 3) PooledConnection реализуем так: а) Реальное соединение с БД открываем только тогда когда происходит вызов сервера б) При вызове сервера - фиксируем currenttimemillis 4) Теперь создаем PoolOfPooledConnections, который держит список PooledConnection и имеет внутренний поток, который обходит все PooledConnection и если они давно не использовались закрывает их 5) При запросе соединения из пула - ищем соединение которое использовалось последним опираясь на currenttimemillis прописанный внутри каждого экземпляра PooledConnection Почитайте про пулы JDBC соединений, JDBC 3 (а может и даже 2) уже имеет некий API для написания пулов и они активно используются многими серверами. Тот же JDBC драйвер мускула имеет свой пул. -------------------- Aut viam inveniam aut faciam |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Это известная проблема разрыва соединений сервером MySQL, на этоv форуме обсуждалась многократно. Вариант решения такой - для каждого неактивного соединения по таймауту выполнять какой-то простой запрос, например, 'select 1' через определенное время (положим, один раз в час). Это сбрасывает таймаут на сервере. Еще неплохо было бы проверять не закрыто ли соединение прежде чем выдавать его пользователю - метод isClosed() у соединения и переоткрывать если закрыто.
|
|||
|
||||
neonfly |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 31.8.2009 Репутация: нет Всего: нет |
Спасибо за исчерпывающие ответы!
Буду делать так: 1. В каждом PoolItem введу переменную - время последнего использования. 2. Периодически в новом потоке буду проверять, не больше ли переменная, скажем, одному часу. 3. Следовательно, если больше, буду закрывать соединение. И так до конца. Т.е. может возникнуть ситуация что все соединения будут закрыты. Тогда, при очередном вызове, буду создавать новый коннекшн к базе. ПС. Не хочу использовать сторонние пулы. Нет четкого контроля над ними. |
|||
|
||||
neonfly |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 31.8.2009 Репутация: нет Всего: нет |
Написал такой класс, который будет выполняться каждый час.
Это сообщение отредактировал(а) neonfly - 23.10.2009, 09:57 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |