Spec-Zone.ru › OpenJDK 25

Интерфейс 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.
  • На экземпляре EventContext, в котором он зарегистрирован, вызывается Context.close().
До этого момента экземпляр EventContext, у которого есть незавершенные регистрации слушателей, продолжает существовать и поддерживаться поставщиком службы.

Реализации слушателей

Методы регистрации и отмены регистрации принимают экземпляр NamingListener. Для разных типов событий NamingEvent существуют подинтерфейсы NamingListener. Например, интерфейс 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
Константа для выражения интереса к событиям, касающимся объектов в поддереве объекта, именуемого целью, включая сам объект, именуемый целью.

Поля, объявленные в интерфейсе 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()
Определяет, может ли слушатель зарегистрировать интерес к несуществующей цели.

Методы, объявленные в интерфейсе 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(NamingListener)

addNamingListener

void addNamingListener(String target, int scope, NamingListener l) throws NamingException
Добавляет слушателя для получения событий именования, возникающих при изменении объекта, указанного строковым именем цели и областью действия. Подробности см. в описании перегруженного метода, принимающего Name.
Параметры:
target — ненулевое строковое имя объекта, разрешаемого относительно этого контекста.
scope — одно из значений OBJECT_SCOPE, ONELEVEL_SCOPE или SUBTREE_SCOPE.
l — ненулевой слушатель.
Выбрасывает:
NamingException — если при добавлении слушателя возникла проблема.
См. также:
  • removeNamingListener(NamingListener)

removeNamingListener

void removeNamingListener(NamingListener l) throws NamingException
Удаляет слушателя из числа получателей событий именования, генерируемых этим EventContext. Слушатель мог быть зарегистрирован в этом EventContext несколько раз, возможно, с разными аргументами цели и области действия. После вызова этого метода слушатель больше не будет получать события, источником которых является данный экземпляр EventContext (за исключением событий, отправка которых уже выполняется). Если слушатель не был зарегистрирован или больше не зарегистрирован в этом экземпляре EventContext, метод ничего не делает.
Параметры:
l — ненулевой слушатель.
Выбрасывает:
NamingException — если при удалении слушателя возникла проблема.
См. также:
  • addNamingListener(Name, int, NamingListener)

targetMustExist

boolean targetMustExist() throws NamingException
Определяет, может ли слушатель зарегистрировать интерес к несуществующей цели.
Возвращает:
true, если цель должна существовать; false, если цель может не существовать.
Выбрасывает:
NamingException — если невозможно определить поведение контекста в этом отношении.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.naming/javax/naming/event/EventContext.html

Spec-Zone.ru

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