Интерфейс 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(String target,
int scope,
NamingListener l) | Добавляет слушателя для получения событий именования, генерируемых при изменении объекта, указанного именем цели и областью. |
void | addNamingListener(Name 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.naming/javax/naming/event/EventContext.html