Интерфейс 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
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, 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://download.java.net/java/early_access/jdk24/docs/api/java.naming/javax/naming/event/EventContext.html