Интерфейс 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, 2023, 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/21/docs/api/java.naming/javax/naming/event/EventContext.html