Spec-Zone.ru › OpenJDK 27

Интерфейс EventContext

Все суперинтерфейсы:
Context
Все известные подынтерфейсы:
EventDirContext
public interface EventContext extends Context
Содержит методы для регистрации и отмены регистрации прослушивателей, уведомляемых о событиях, возникающих при изменении объектов, имена которых указаны в контексте.

Целевой объект

Параметр имени в методах 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
Модификатор и тип Поле Описание
static final String AUTHORITATIVE
Константа, содержащая имя свойства среды, задающего уровень достоверности запрашиваемой службы.
static final String BATCHSIZE
Константа, содержащая имя свойства среды, задающего размер пакета данных, возвращаемых протоколом службы.
static final String DNS_URL
Константа, содержащая имя свойства среды, задающего имена узла DNS и домена для контекста URL JNDI (например, "dns://somehost/wiz.com").
static final String INITIAL_CONTEXT_FACTORY
Константа, содержащая имя свойства среды, задающего используемую фабрику начального контекста.
static final String LANGUAGE
Константа, содержащая имя свойства среды, задающего предпочтительный язык для работы со службой.
static final String OBJECT_FACTORIES
Константа, содержащая имя свойства среды, задающего список используемых фабрик объектов.
static final String PROVIDER_URL
Константа, содержащая имя свойства среды, задающего сведения о конфигурации для поставщика службы.
static final String REFERRAL
Константа, содержащая имя свойства среды, задающего способ обработки перенаправлений, обнаруженных поставщиком службы.
static final String SECURITY_AUTHENTICATION
Константа, содержащая имя свойства среды, задающего используемый уровень безопасности.
static final String SECURITY_CREDENTIALS
Константа, содержащая имя свойства среды, задающего учетные данные субъекта для аутентификации вызывающей стороны в службе.
static final String SECURITY_PRINCIPAL
Константа, содержащая имя свойства среды, задающего идентификатор субъекта для аутентификации вызывающей стороны в службе.
static final String SECURITY_PROTOCOL
Константа, содержащая имя свойства среды, задающего используемый протокол безопасности.
static final String STATE_FACTORIES
Константа, содержащая имя свойства среды, задающего список используемых фабрик состояний.
static final String URL_PKG_PREFIXES
Константа, содержащая имя свойства среды, задающего список префиксов пакетов, используемых при загрузке фабрик контекстов URL.

Краткое описание методов

Модификатор и тип Метод Описание
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 addToEnvironment(String propName, Object propVal)
Добавляет новое свойство среды в среду этого контекста.
void bind(String name, Object obj)
Связывает имя с объектом.
void bind(Name name, Object obj)
Связывает имя с объектом.
void close()
Закрывает этот контекст.
String composeName(String name, String prefix)
Объединяет имя этого контекста с именем, относительным к этому контексту.
Name composeName(Name name, Name prefix)
Объединяет имя этого контекста с именем, относительным к этому контексту.
Context createSubcontext(String name)
Создает и связывает новый контекст.
Context createSubcontext(Name name)
Создает и связывает новый контекст.
void destroySubcontext(String name)
Уничтожает указанный контекст и удаляет его из пространства имен.
void destroySubcontext(Name name)
Уничтожает указанный контекст и удаляет его из пространства имен.
Hashtable<?,?> getEnvironment()
Получает среду, действующую для этого контекста.
String getNameInNamespace()
Получает полное имя этого контекста в его собственном пространстве имен.
NameParser getNameParser(String name)
Получает анализатор, связанный с указанным контекстом.
NameParser getNameParser(Name name)
Получает анализатор, связанный с указанным контекстом.
NamingEnumeration<NameClassPair> list(String name)
Перечисляет имена, связанные в указанном контексте, вместе с именами классов связанных с ними объектов.
NamingEnumeration<NameClassPair> list(Name name)
Перечисляет имена, связанные в указанном контексте, вместе с именами классов связанных с ними объектов.
NamingEnumeration<Binding> listBindings(String name)
Перечисляет имена, связанные в указанном контексте, вместе со связанными с ними объектами.
NamingEnumeration<Binding> listBindings(Name name)
Перечисляет имена, связанные в указанном контексте, вместе со связанными с ними объектами.
Object lookup(String name)
Получает указанный объект.
Object lookup(Name name)
Получает указанный объект.
Object lookupLink(String name)
Получает указанный объект, переходя по ссылкам, кроме последнего атомарного компонента имени.
Object lookupLink(Name name)
Получает указанный объект, переходя по ссылкам, кроме последнего атомарного компонента имени.
void rebind(String name, Object obj)
Связывает имя с объектом, заменяя существующую связь.
void rebind(Name name, Object obj)
Связывает имя с объектом, заменяя существующую связь.
Object removeFromEnvironment(String propName)
Удаляет свойство среды из среды этого контекста.
void rename(String oldName, String newName)
Связывает новое имя с объектом, связанным со старым именем, и отменяет связь со старым именем.
void rename(Name oldName, Name newName)
Связывает новое имя с объектом, связанным со старым именем, и отменяет связь со старым именем.
void unbind(String name)
Отменяет связь с указанным объектом.
void unbind(Name name)
Отменяет связь с указанным объектом.

Подробное описание полей

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, 2026, 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.

Spec-Zone.ru

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