Интерфейс 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 |
Добавляет прослушиватель для получения событий именования, возникающих при изменении объекта, указанного строковым именем целевого объекта и областью действия. |
void |
addNamingListener |
Добавляет прослушиватель для получения событий именования, возникающих при изменении объектов, определяемых целевым объектом и областью действия. |
void |
removeNamingListener |
Удаляет прослушиватель из списка получателей событий именования, возникающих в этом 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 |
Добавляет новое свойство среды в среду этого контекста. |
void |
bind |
Связывает имя с объектом. |
void |
bind |
Связывает имя с объектом. |
void |
close() |
Закрывает этот контекст. |
String |
composeName |
Объединяет имя этого контекста с именем, относительным к этому контексту. |
Name |
composeName |
Объединяет имя этого контекста с именем, относительным к этому контексту. |
Context |
createSubcontext |
Создает и связывает новый контекст. |
Context |
createSubcontext |
Создает и связывает новый контекст. |
void |
destroySubcontext |
Уничтожает указанный контекст и удаляет его из пространства имен. |
void |
destroySubcontext |
Уничтожает указанный контекст и удаляет его из пространства имен. |
Hashtable |
getEnvironment() |
Получает среду, действующую для этого контекста. |
String |
getNameInNamespace() |
Получает полное имя этого контекста в его собственном пространстве имен. |
NameParser |
getNameParser |
Получает анализатор, связанный с указанным контекстом. |
NameParser |
getNameParser |
Получает анализатор, связанный с указанным контекстом. |
NamingEnumeration |
list |
Перечисляет имена, связанные в указанном контексте, вместе с именами классов связанных с ними объектов. |
NamingEnumeration |
list |
Перечисляет имена, связанные в указанном контексте, вместе с именами классов связанных с ними объектов. |
NamingEnumeration |
listBindings |
Перечисляет имена, связанные в указанном контексте, вместе со связанными с ними объектами. |
NamingEnumeration |
listBindings |
Перечисляет имена, связанные в указанном контексте, вместе со связанными с ними объектами. |
Object |
lookup |
Получает указанный объект. |
Object |
lookup |
Получает указанный объект. |
Object |
lookupLink |
Получает указанный объект, переходя по ссылкам, кроме последнего атомарного компонента имени. |
Object |
lookupLink |
Получает указанный объект, переходя по ссылкам, кроме последнего атомарного компонента имени. |
void |
rebind |
Связывает имя с объектом, заменяя существующую связь. |
void |
rebind |
Связывает имя с объектом, заменяя существующую связь. |
Object |
removeFromEnvironment |
Удаляет свойство среды из среды этого контекста. |
void |
rename |
Связывает новое имя с объектом, связанным со старым именем, и отменяет связь со старым именем. |
void |
rename |
Связывает новое имя с объектом, связанным со старым именем, и отменяет связь со старым именем. |
void |
unbind |
Отменяет связь с указанным объектом. |
void |
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— если при добавлении прослушивателя возникла проблема. - См. также:
addNamingListener
void addNamingListener(String target, int scope, NamingListener l) throws NamingException
Name.- Параметры:
-
target— ненулевое строковое имя объекта, разрешаемое относительно этого контекста. -
scope— одно из значенийOBJECT_SCOPE,ONELEVEL_SCOPEилиSUBTREE_SCOPE. -
l— ненулевой прослушиватель. - Выбрасывает:
-
NamingException— если при добавлении прослушивателя возникла проблема. - См. также:
removeNamingListener
void removeNamingListener(NamingListener l) throws NamingException
EventContext. Прослушиватель мог быть зарегистрирован в этом EventContext несколько раз, возможно, с разными аргументами целевого объекта или области действия. После вызова этого метода прослушиватель больше не будет получать события, источником которых является данный экземпляр EventContext (за исключением событий, обработка которых уже началась). Если прослушиватель не был зарегистрирован в этом экземпляре EventContext или его регистрация уже отменена, метод ничего не делает.- Параметры:
-
l— ненулевой прослушиватель. - Выбрасывает:
-
NamingException— если при удалении прослушивателя возникла проблема. - См. также:
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.