2012-05-21 3 views
3

Будет ли соединение Java JRE закрываться, если приложения выходят из строя или выходят без закрытия активных соединений? Если это не база данных, чтобы отключить эти соединения?Будет ли Java JRE закрывать соединения, если кражи приложений?

Я понимаю, что если в случае сбоя Java база данных должна будет отключать все открытые соединения, так как больше ничего не нужно делать.

EDIT Дополнительная мысль. Если WAR, развернутый в Tomcat, выйдет из строя, сервер Tomcat очистит открытые соединения?

+0

Это была горячая дискуссия вокруг офиса, но я не уверен, где найти информацию. –

+1

Определите «крушение». Для некоторых людей это, кажется, означает не что иное, как пойманное исключение. Настоящий сбой - это когда весь процесс принудительно завершается. В этом случае * все * ресурсы процесса освобождаются операционной системой: память, файлы, соединения, семафоры, разделяемая память, ... Не зная, о чем вы говорите, невозможно комментировать дальше. – EJP

ответ

2

Это действительно зависит.

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

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

+0

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

+0

Это самый безопасный вариант, полная авария JRE встречается редко, но это случается время от времени. В этом случае платит оборона, мне нравится ваш подход. – Ewald

0

В большинстве случаев ваше приложение должно закрыть соединения в любых надлежащих манипуляторах ошибок. Я предпочитаю настроить источник данных в Tomcat, как упоминал Эвальд. Там вы можете определить максимальное количество подключений и тайм-аут в вашем context.xml. Когда ваше приложение ставит слишком много соединений, оно освободит его.

+0

Действительно, имея контейнер, как Tomcat, ручка этого, удаляет немного напряжения на нас, бедных разработчиков. – Ewald

Смежные вопросы