Spec-Zone.ru › OpenJDK 17

Интерфейс 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(String target, int scope, NamingListener l)
Добавляет слушателя для получения событий именования, возникающих при изменении объекта, указанного строкой имени целевого объекта и областью действия.
void addNamingListener(Name target, int scope, NamingListener l)
Добавляет слушателя для получения событий именования, возникающих при изменении объекта(ов), идентифицируемых целевым объектом и областью действия.
void removeNamingListener(NamingListener l)
Удаляет слушателя из получения событий именования, генерируемых этим 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 - Если при добавлении слушателя возникла проблема.
См. также:
  • 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, 2021, 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/17/docs/api/java.naming/javax/naming/event/EventContext.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API