Интерфейс 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 int |
OBJECT_SCOPE Константа для выражения интереса к событиям, касающимся объекта, указанного целевым именем. |
static int |
ONELEVEL_SCOPE Константа для выражения интереса к событиям, касающимся объектов в контексте, указанном целевым именем, за исключением контекста, указанного целевым именем. |
static 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(Name target,
int scope,
NamingListener l) Добавляет слушателя для получения событий об именах, генерируемых при изменении объекта(ов), определённых целевым именем и областью определения. |
void |
addNamingListener(String target,
int scope,
NamingListener l) Добавляет слушателя для получения событий об именах, генерируемых при изменении объекта, названного строкой целевого имени и области определения. |
void |
removeNamingListener(NamingListener l) Удаляет слушателя из получения событий об именах, генерируемых этим |
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- Если возникла проблема при добавлении слушателя. - См. также:
removeNamingListener(javax.naming.event.NamingListener)
addNamingListener
void addNamingListener(String target,
int scope,
NamingListener l)
throws NamingException Добавляет слушателя для получения событий именования, которые генерируются при изменении объекта, указанного строковым именем целевого объекта и областью. См. перегрузку, принимающую Name для получения подробностей.
- Параметры:
-
target- Строковое имя объекта, разрешаемого относительно этого контекста. -
scope- Одно изOBJECT_SCOPE,ONELEVEL_SCOPE, илиSUBTREE_SCOPE. -
l- Слушатель. - Исключения:
-
NamingException- Если возникла проблема при добавлении слушателя. - См. также:
removeNamingListener(javax.naming.event.NamingListener)
removeNamingListener
void removeNamingListener(NamingListener l)
throws NamingException Удаляет слушателя для получения событий именования, генерируемых этим EventContext. Слушатель может быть зарегистрирован более одного раза в этом EventContext, возможно, с разными аргументами целевого объекта/области. После вызова этого метода слушатель больше не будет получать события с этим EventContext как источником события (за исключением событий, которые уже находятся в процессе отправки). Если слушатель не был зарегистрирован или больше не зарегистрирован с этим EventContext экземпляром, этот метод ничего не делает.
- Параметры:
-
l- Слушатель. - Исключения:
-
NamingException- Если возникла проблема при удалении слушателя. - См. также:
addNamingListener(javax.naming.Name, int, javax.naming.event.NamingListener)
targetMustExist
boolean targetMustExist()
throws NamingException Определяет, может ли слушатель зарегистрировать интерес к целевому объекту, который не существует.
- Возвращает:
- true, если целевой объект должен существовать; false, если целевой объект не обязан существовать.
- Исключения:
-
NamingException- Если поведение контекста в этом отношении невозможно определить.
© 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.