Интерфейс EventContext
- Все суперинтерфейсы:
Context
- Все известные дочерние интерфейсы:
EventDirContext
public interface EventContext extends Context
Целевой объект
Параметр name в методахaddNamingListener() называется целевым объектом. Целевой объект вместе с областью действия определяют объект(ы), к которым слушатель проявляет интерес. Возможно регистрировать интерес к целевому объекту, который не существует, но могут быть ограничения в том, насколько это поддерживается поставщиком сервиса и базовым протоколом/сервисом. Если сервис поддерживает только регистрацию для существующих целевых объектов, попытка зарегистрироваться для несуществующего целевого объекта приводит к выбрасыванию исключения NameNotFoundException как можно раньше, предпочтительно в момент вызова addNamingListener(), или, если это невозможно, слушатель получит исключение через NamingExceptionEvent.
Также, для поставщиков сервисов, которые поддерживают только регистрацию для существующих целевых объектов, когда целевой объект, для которого зарегистрирован слушатель, впоследствии удаляется из пространства имен, слушатель уведомляется посредством NamingExceptionEvent (содержащего NameNotFoundException)
Приложение может использовать метод targetMustExist() для проверки, поддерживает ли EventContext регистрацию для несуществующих целевых объектов.
Источник события
ЭкземплярEventContext , на котором вызываются методы регистрации, является источником события для событий, которые (возможно) генерируются. Источник не обязательно является объектом, указанным целевым объектом. Только когда целевой объект имеет пустое имя, объект, указанный целевым объектом, является источником. Другими словами, целевой объект вместе с параметром области действия используются для идентификации объекта(ов), к которому слушатель проявляет интерес, но источником события является экземпляр EventContext , с которым слушатель зарегистрирован. Например, предположим, что слушатель производит следующую регистрацию:
NamespaceChangeListener listener = ...;
src.addNamingListener("x", SUBTREE_SCOPE, listener);
Когда объект с именем "x/y" впоследствии удаляется, соответствующее NamingEvent (evt) должно содержать:
evt.getEventContext() == src
evt.getOldBinding().getName().equals("x/y")
Кроме того, регистрация/дерегистрация слушателей выполняется с экземпляром EventContext , а не с соответствующим объектом в пространстве имен. Если программа намеревается в какой-то момент удалить слушателя, ей необходимо сохранить ссылку на экземпляр EventContext , на котором она вызвала addNamingListener() (точно так же, как ей нужно сохранить ссылку на слушателя для его удаления позже). Она не может ожидать выполнить lookup() и получить другой экземпляр EventContext , на котором можно выполнить дерегистрацию.
Срок действия регистрации
Зарегистрированный слушатель становится дезактивированным, когда:- Он удаляется с помощью
removeNamingListener(). - Исключение выбрасывается во время сбора информации о событиях. То есть, когда слушатель получает
NamingExceptionEvent. -
Вызывается
Context.close()на экземпляреEventContext, с которым он зарегистрирован.
EventContext , у которого есть незавершенные слушатели, будет продолжать существовать и обслуживаться поставщиком сервиса. Реализации слушателей
Методы регистрации/дерегистрации принимают экземплярNamingListener. Существуют дочерние интерфейсы NamingListener для разных типов событий NamingEvent. Например, интерфейс ObjectChangeListener предназначен для типа события NamingEvent.OBJECT_CHANGED. Для регистрации интереса к нескольким типам событий реализация слушателя должна реализовывать несколько дочерних интерфейсов NamingListener и использовать один вызов addNamingListener(). Это не только сокращает количество вызовов методов и, возможно, размер кода слушателей, но также позволяет некоторым поставщикам сервисов оптимизировать регистрацию. Вопросы потоков
Как и экземплярыContext в целом, экземпляры EventContext не гарантируют потокобезопасность. Необходимо соблюдать осторожность, когда несколько потоков одновременно обращаются к одному и тому же EventContext. Более подробную информацию о проблемах потоков см. в описании пакета в описании пакета.- С:
- 1.3
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
OBJECT_SCOPE |
Константа для выражения интереса к событиям, касающимся объекта, указанного целевым объектом. |
static final int |
ONELEVEL_SCOPE |
Константа для выражения интереса к событиям, касающимся объектов в контексте, указанном целевым объектом, за исключением контекста, указанного целевым объектом. |
static final int |
SUBTREE_SCOPE |
Константа для выражения интереса к событиям, касающимся объектов в поддереве объекта, указанного целевым объектом, включая сам объект, указанный целевым объектом. |
Поля, объявленные в интерфейсе javax.naming.Context
APPLET, AUTHORITATIVE, BATCHSIZE, DNS_URL, INITIAL_CONTEXT_FACTORY, LANGUAGE, OBJECT_FACTORIES, PROVIDER_URL, REFERRAL, SECURITY_AUTHENTICATION, SECURITY_CREDENTIALS, SECURITY_PRINCIPAL, SECURITY_PROTOCOL, STATE_FACTORIES, URL_PKG_PREFIXES
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addNamingListener |
Добавляет слушателя для получения событий именования, возникающих при изменении объекта, указанного строкой имени целевого объекта и областью действия. |
void |
addNamingListener |
Добавляет слушателя для получения событий именования, возникающих при изменении объекта(ов), идентифицируемых целевым объектом и областью действия. |
void |
removeNamingListener |
Удаляет слушателя из получения событий именования, генерируемых этим EventContext. |
boolean |
targetMustExist() |
Определяет, может ли слушатель зарегистрировать интерес к целевому объекту, который не существует. |
Методы, объявленные в интерфейсе javax.naming.Context
addToEnvironment, bind, bind, close, composeName, composeName, createSubcontext, createSubcontext, destroySubcontext, destroySubcontext, getEnvironment, getNameInNamespace, getNameParser, getNameParser, list, list, listBindings, listBindings, lookup, lookup, lookupLink, lookupLink, rebind, rebind, removeFromEnvironment, rename, rename, unbind, unbind
Подробное описание полей
OBJECT_SCOPE
static final int OBJECT_SCOPE
Значение этой константы равно 0.
- См. также:
ONELEVEL_SCOPE
static final int ONELEVEL_SCOPE
Значение этой константы равно 1.
- См. также:
SUBTREE_SCOPE
static final int SUBTREE_SCOPE
Значение этой константы равно 2.
- См. также:
Подробное описание методов
addNamingListener
void addNamingListener(Name target, int scope, NamingListener l) throws NamingException
OBJECT_SCOPE, ONELEVEL_SCOPE, и SUBTREE_SCOPE, чтобы узнать, как scope влияет на регистрацию. target необходимо указать контекст только тогда, когда scope равен ONELEVEL_SCOPE. target может указать неконтекст, если scope равен либо OBJECT_SCOPE, либо SUBTREE_SCOPE. Использование SUBTREE_SCOPE для неконтекста может быть полезно, например, если вызывающий код заранее не знает, является ли target контекстом и просто хочет зарегистрировать интерес к (возможно вырожденному) поддереву с корнем в target.
При уведомлении слушателя о событии слушатель может быть вызван в потоке, отличном от того, в котором выполняется addNamingListener(). При одновременном доступе нескольких потоков к одному и тому же EventContext необходимо соблюдать осторожность. См. описание пакета для получения дополнительной информации о проблемах многопоточности.
- Параметры:
-
target- Имя, которое должно быть разрешено относительно этого контекста. -
scope- Одно из значенийOBJECT_SCOPE,ONELEVEL_SCOPE, илиSUBTREE_SCOPE. -
l- Слушатель. - Исключения:
-
NamingException- Если при добавлении слушателя возникла проблема. - См. также:
addNamingListener
void addNamingListener(String target, int scope, NamingListener l) throws NamingException
Name.- Параметры:
-
target- Строковое имя объекта, разрешенное относительно этого контекста. -
scope- Одно из значенийOBJECT_SCOPE,ONELEVEL_SCOPE, илиSUBTREE_SCOPE. -
l- Слушатель. - Исключения:
-
NamingException- Если при добавлении слушателя возникла проблема. - См. также:
removeNamingListener
void removeNamingListener(NamingListener l) throws NamingException
EventContext. Слушатель может быть зарегистрирован в этом EventContext более одного раза, возможно, с разными аргументами целевого объекта/области действия. После вызова этого метода слушатель больше не будет получать события с этим экземпляром EventContext в качестве источника событий (за исключением событий, которые уже обрабатываются). Если слушатель не был или больше не зарегистрирован в этом экземпляре EventContext, этот метод ничего не делает.- Параметры:
-
l- Слушатель. - Исключения:
-
NamingException- Если при удалении слушателя возникла проблема. - См. также:
targetMustExist
boolean targetMustExist() throws NamingException
- Возвращает:
- true, если целевой объект должен существовать; false, если он не должен существовать.
- Исключения:
-
NamingException- Если поведение контекста в этом отношении не может быть определено.
© 1993, 2021, 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/17/docs/api/java.naming/javax/naming/event/EventContext.html