Закрытие (Учебные руководства Java™> Именование Java и Интерфейс Каталога> Усовершенствованные Темы для Пользователей LDAP)


След: Именование Java и Интерфейс Каталога
Урок: Усовершенствованные Темы для Пользователей LDAP
Раздел: управление Соединением
Закрытие
Домашняя страница > Именование Java и Интерфейс Каталога > Усовершенствованные Темы для Пользователей LDAP

Закрытие

Нормальная сборка "мусора" заботится об удалении экземпляров Context, когда они больше не находятся в использовании. Соединения, используемые собираемыми "мусор" экземплярами Context, будут закрыты автоматически. Поэтому, Вы не должны явно закрыть соединения. Сетевые соединения, однако, являются ограниченными ресурсами и для определенных программ, Вы могли бы хотеть управлять их быстрым увеличением и использованием. Этот раздел содержит информацию о том, как закрыть соединения и как быть уведомленным, если сервер закрывает соединение.

Явные Закрытия

Вы вызываете Context.close() на экземпляр Context, чтобы указать, что Вы больше не должны использовать его. Если закрываемый экземпляр Context использует выделенное соединение, соединение также закрывается. Если экземпляр Context совместно использует соединение с другим Context и незавершенными экземплярами NamingEnumeration, то соединение не будет закрыто, пока close() не был вызван на весь такой Context и экземпляры NamingEnumeration.

В example от раздела Создания Соединения в качестве примера должны быть закрыты все три экземпляра Context прежде, чем базовое соединение закрывается.

// Create initial context
DirContext ctx = new InitialDirContext(env);

// Get a copy of the same context
Context ctx2 = (Context)ctx.lookup("");

// Get a child context
Context ctx3 = (Context) ctx.lookup("ou=NewHires");

// do something useful with ctx, ctx2, ctx3

// Close the contexts when we're done
ctx.close();
ctx2.close();
ctx3.close();

Принудительные Неявные Закрытия

Как упомянуто ранее, для тех Context и экземпляры NamingEnumeration, которые больше не находятся в контексте, система Среды выполнения Java в конечном счете соберет "мусор" их, таким образом очищая состояние, которое сделал бы close(). Чтобы вызвать сборку "мусора", можно использовать следующий код.

Runtime.getRuntime().gc();
Runtime.getRuntime().runFinalization();

В зависимости от состояния программы, выполняя эту процедуру может вызвать серьезное (временное) ухудшение производительности. Если Вы должны гарантировать, что соединения закрываются, отслеживают экземпляры Context и закрывают их явно.

Обнаружение Закрытий Соединения

У серверов LDAP часто есть неактивный период тайм-аута, после которого они закроют соединения, больше не используясь. Когда Вы впоследствии вызываете метод на экземпляр Context, который использует такое соединение, метод бросит CommunicationException. Чтобы обнаружить, когда сервер закрывает соединение, которое использует экземпляр Context, Вы регистрируете UnsolicitedNotificationListener в экземпляре Context. AN example показывается в Незапрашиваемом разделе Уведомлений LDAP. Хотя пример разрабатывается для того, чтобы получить незапрашиваемое уведомление от сервера, это может также использоваться, чтобы обнаружить закрытия соединения сервером. После запуска программы остановите сервер LDAP и заметьте, что метод namingExceptionThrown() слушателя вызывают.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Создание
Следующая страница: Объединение в пул



Spec-Zone.ru - all specs in one place