Интерфейс 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. -
На экземпляре
EventContext, в котором он зарегистрирован, вызываетсяContext.close().
EventContext, у которого есть незавершенные регистрации слушателей, продолжает существовать и поддерживаться поставщиком службы. Реализации слушателей
Методы регистрации и отмены регистрации принимают экземплярNamingListener. Для разных типов событий NamingEvent существуют подинтерфейсы NamingListener. Например, интерфейс 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 |
Константа для выражения интереса к событиям, касающимся объектов в поддереве объекта, именуемого целью, включая сам объект, именуемый целью. |
Поля, объявленные в интерфейсе 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() |
Определяет, может ли слушатель зарегистрировать интерес к несуществующей цели. |
Методы, объявленные в интерфейсе 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://docs.oracle.com/en/java/javase/25/docs/api/java.naming/javax/naming/event/EventContext.html