Spec-Zone.ru › OpenJDK 24

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

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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.naming/javax/naming/event/EventContext.html

Spec-Zone.ru

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