Spec-Zone .ru
спецификации, руководства, описания, API
|
Нормальная сборка "мусора" заботится об удалении экземпляров 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, Вы регистрируете AN example
показывается в Незапрашиваемом разделе Уведомлений LDAP. Хотя пример разрабатывается для того, чтобы получить незапрашиваемое уведомление от сервера, это может также использоваться, чтобы обнаружить закрытия соединения сервером. После запуска программы остановите сервер LDAP и заметьте, что метод namingExceptionThrown()