|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Нормальная сборка "мусора" заботится об удалении экземпляров Context, когда они больше не находятся в использовании. Соединения, используемые собираемыми "мусор" экземплярами Context, будут закрыты автоматически. Поэтому, Вы не должны явно закрыть соединения. Сетевые соединения, однако, являются ограниченными ресурсами и для определенных программ, Вы могли бы хотеть управлять их быстрым увеличением и использованием. Этот раздел содержит информацию о том, как закрыть соединения и как быть уведомленным, если сервер закрывает соединение.
Вы вызываете Context.close() на экземпляр Context, чтобы указать, что Вы больше не должны использовать его. Если закрываемый экземпляр Context использует выделенное соединение, соединение также закрывается. Если экземпляр Context совместно использует соединение с другим Context и незавершенными экземплярами NamingEnumeration, то соединение не будет закрыто, пока close() не был вызван на весь такой Context и экземпляры NamingEnumeration.
В
// 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, Вы регистрируете в экземпляре Context. слушателя вызывают.