Spec-Zone.ru › OpenJDK 8

Интерфейс 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)

Удаляет слушателя из получения событий об именах, генерируемых этим 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, 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.

Spec-Zone.ru

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