Пакет javax.naming.event
Этот пакет определяет операции уведомления о событиях интерфейса Java Naming and Directory Interface (JNDI). JNDI предоставляет приложениям, написанным на языке программирования Java, функциональность именования и каталогов. Он разработан независимо от какой-либо конкретной реализации службы именования или каталогов. Таким образом, различные службы — новые, появляющиеся и уже развернутые — можно использовать единообразным способом.
События именования
Этот пакет определяет класс NamingEvent для представления события, создаваемого службой именования/каталогов. Он также определяет подинтерфейсы Context и DirContext, называемые EventContext и EventDirContext, с помощью которых приложения могут регистрировать интерес к событиям, генерируемым контекстом.
NamingEvent представляет событие, происходящее в службе именования или каталогов. Существует две категории событий именования:
- События, затрагивающие пространство имен (добавление/удаление/переименование объекта)
- События, затрагивающие содержимое объектов.
NamespaceChangeListener, ObjectChangeListener. Например, приложение может зарегистрировать интерес к изменениям объектов в контексте следующим образом:
EventContext src =
(EventContext)(new InitialContext()).lookup("o=wiz,c=us");
src.addNamingListener("ou=users", EventContext.ONELEVEL_SCOPE,
new ChangeHandler());
...
class ChangeHandler implements ObjectChangeListener {
public void objectChanged(NamingEvent evt) {
System.out.println(evt.getNewBinding());
}
public void namingExceptionThrown(NamingExceptionEvent evt) {
System.out.println(evt.getException());
}
}
Вопросы многопоточности
При отправке события слушателю метод слушателя (например,objectChanged()) может выполняться в потоке, отличном от того, в котором был выполнен вызов addNamingListener(). Выбор используемого потока делает поставщик службы. При отправке события нескольким слушателям поставщик службы может выбрать (и обычно ему рекомендуется это делать) одновременное выполнение методов слушателей в отдельных потоках. При вызове NamingEvent.getEventContext() экземпляр слушателя должен учитывать вероятность того, что другие потоки будут одновременно работать с этим контекстом. Аналогично, при регистрации слушателя с помощью addNamingListener() регистрирующий поток должен учитывать высокую вероятность того, что поставщик службы впоследствии вызовет слушателей в новых потоках. Поскольку экземпляры Context в общем случае не гарантированно являются потокобезопасными, все операции с контекстом при необходимости необходимо синхронизировать.
Обработка исключений
При регистрации слушателя для получения событий от контекста контексту может потребоваться выполнить внутреннюю обработку для сбора информации, необходимой для создания событий. Например, контексту может потребоваться отправить запрос серверу, чтобы зарегистрировать интерес к изменениям на сервере, которые впоследствии будут преобразованы в события. Если происходит исключение, препятствующее сбору информации о событиях, слушатель никогда не будет уведомлен об этих событиях. При возникновении такого исключения генерируетсяNamingExceptionEvent, чтобы уведомить слушателя. Вызывается метод namingExceptionThrown() слушателя, как показано в приведенном выше примере кода, и слушатель автоматически отменяет регистрацию. Спецификация пакета
Спецификацию API JNDI и связанные документы можно найти в документации JNDI.- Начиная с:
- 1.3
| Класс | Описание |
|---|---|
| EventContext | Содержит методы для регистрации и отмены регистрации слушателей, которых следует уведомлять о событиях, возникающих при изменении объектов, имена которых указаны в контексте. |
| EventDirContext | Содержит методы для регистрации слушателей, которых следует уведомлять о событиях, возникающих при изменении объектов, имена которых указаны в контексте каталога. |
| NamespaceChangeListener | Определяет методы, которые должен реализовать слушатель, заинтересованный в изменениях пространства имен. |
| NamingEvent | Этот класс представляет событие, генерируемое службой именования/каталогов. |
| NamingExceptionEvent | Этот класс представляет событие, генерируемое при возникновении NamingException в процедурах/процессах, используемых для сбора информации с целью уведомления слушателей о NamingEvent. |
| NamingListener | Этот интерфейс является базовым для интерфейсов слушателей, обрабатывающих NamingEvent. |
| ObjectChangeListener | Определяет метод, который должен реализовать слушатель NamingEvent с типом события OBJECT_CHANGED. |
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.naming/javax/naming/event/package-summary.html