Spec-Zone.ru › OpenJDK 21

Интерфейс 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, 2023, 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/21/docs/api/java.naming/javax/naming/event/EventContext.html

Spec-Zone.ru

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