![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
coderinside |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Доброе время суток! Подскажите как определить потерю связи с сервером БД? В кратце: сервер - postgres, клиентская GUI программа на swing'e. Ест-но БД на другом компьютере в сети. Возможны частые отключения кабеля
![]() Сейчас делаю так:
Естественно если кабель выдернуть то будут exception'ы. Как следует это делать? |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Соединение нарушено, база зависла, в нее попал вражеский снаряд или она очень занята, в любом случае попытка общения с ней закончится исключением. А дальше можно попытаться создать новое соединение.
|
|||
|
||||
coderinside |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Т.е. намек на то, что обработку исключений от всех возможных запросов нужно проводить где-то в одном месте, там попытаться разузнать какое исключение означает обрыв соединения (и пр.) и по нему ставить флаг - "НЕТ ПОДКЛЮЧНИЯ"? Так? |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Именно так. Тебе остается надеяться только на тот сервис, который предоставляет драйвер JDBC. Насколько я помню драйвер от PostgreSQL выдает вполне вменяемое исключение в случае потери связи с сервером. Есть еще один вариант - выполнять постоянный пинг сервера и запускать запросы только в том случае если пинги проходят. Но это не защитит от обрыва соединения во время выполнения запроса. Еще учти, что связаться с сервером драйвер пытается довольно длительное время и желательно предусматривать это в программе чтобы пользователь за время ожидания не наделал ничего лишнего. Это сообщение отредактировал(а) tux - 5.1.2007, 07:38 |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Намек на то, что обрыв соединения - не единственная возможная проблема. Пользователя в общем-то, не интересует причина, по которой база его не обслуживает. Поэтому приложение должно проанализировать выброшенное исключение. Если нарушено именно соединение, то можно сделать несколько попыток создать новое соединение (не ставя даже пользователя в известность) - возможно просто был кратковременный сбой, или базу перезапустили. Если отказ по таймауту, значит база занята, или запрос слишком тяжелый или вообще с базой что-то неладное. Возможно, новое соединение тоже в такой ситуации может помочь. Если же ошибка в запросе, то надо корректировать запрос. Чтобы выяснить причину, возможно придется анализировать сообщение, которое содержится в исключении, потому что исключение может быть всегда одного типа, но с разными сообщениями. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |