2014-10-26 3 views
0

после предыдущего вопроса я о пружинном & Iptables команде Spring transaction hangs for iptables commandc3p0 выписка из соединения висит Iptables команды

я узнал, что это была проблема с функциональностью GetConnection, где простаивают-соединение смешиваются с расчетным-соединением тест при помощи следующей команды

iptables -A INPUT -p tcp --destination-port <database-listener-port> -s <database-host-ip> 

В документации Java для класса BasicResourcePool я вижу там действительно может быть такая проблема. и это именно то, где я получить такой бесконечный цикл

private synchronized Object prelimCheckoutResource(long timeout) 
... 
// this is a hack -- but "doing it right" adds a lot of complexity, and collisions between 
// an idle check and a checkout should be relatively rare. anyway, it should work just fine. 
if (idleCheckResources.contains(resc)) 

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

Цените свой ввод.

ответ

0

, так что вы представляете c3p0 с необычным и сложным режимом отказа здесь. простоя проверки не терпят неудачу. и они не преуспевают. они висят бесконечно, пока вы вынуждаете входящие пакеты удаляться. (я предполагаю, что вы используете полную команду из earlier post, которая указывает на удаление входящих пакетов.) c3p0 ожидает, что тесты будут успешными или неудачными с Исключением в разумные сроки. висящие вызовы.

Вы можете немного обойти эти проблемы, установив параметр конфигурации c3p0 maxAdministrativeTaskTime checkoutTimeout, к сожалению, не поможет: он только время ожидания клиентов wait() на недоступных соединениях, он не предназначен для того, чтобы заметить, что клиенты застряли в бесконечном, испытания.

Обратите внимание, что этот режим сбоя, который вы создаете, не похож на типичное типичное изъятие базы данных. при реальном сбое базы данных проверка простоя Connection немедленно завершилась с Исключением, поскольку исходящее соединение tcp было отклонено.

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

+0

Да. именование конфигурации отличается тем, что те конфигурации, которые мы раскрываем в нашей библиотеке обертывания, для инициализации компонента c3p0DataSource весной (например, abandonedConnectionTimeout ссылается на unverturnedConnectionTimeout). – Sima

+0

, который сказал, я ценю ваш комментарий, что такое поведение не похоже на ситуацию в реальном мире, и мы не должны ожидать его в сбоях базы данных. (его собственная связь или хост, на котором он работает). Мы попробуем maxAdministrativeTaskTime и обновим этот поток, если он поможет в таком необычном режиме. Спасибо за ваше дорогое время. – Sima

+0

Вы были правы относительно maxAdministrativeTask, пытаясь установить его на меньшее значение, не вернули соединение из-под висячего. – Sima