Пакет 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() слушателя, как показано в примере кода выше, и слушатель автоматически отписывается.
С момента:
1.3
ИнтерфейсОписание
EventContext

Содержит методы для регистрации/снятия слушателей, которые будут уведомляться о событиях, возникающих при изменении имен объектов в контексте.

EventDirContext

Содержит методы для регистрации слушателей, которые будут уведомляться о событиях, возникающих при изменении имен объектов в контексте каталога.

NamespaceChangeListener

Определяет методы, которые должен реализовать слушатель, заинтересованный в изменениях в пространстве имен.

NamingListener

Этот интерфейс является корневым для интерфейсов слушателей, обрабатывающих NamingEvent.

ObjectChangeListener

Определяет метод, который должен реализовать слушатель NamingEvent с типом события OBJECT_CHANGED.

КлассОписание
NamingEvent

Этот класс представляет событие, генерируемое службой именования/каталога.

NamingExceptionEvent

Этот класс представляет событие, сгенерированное при возникновении NamingException при выполнении процедур/процессов, используемых для сбора информации для уведомления слушателей о NamingEvent.

© 1993, 2020, 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/11/docs/api/java.naming/javax/naming/event/package-summary.html

Spec-Zone .ru
спецификации, руководства, описания, API