Класс InitialContext
- java.lang.Object
-
- javax.naming.InitialContext
- Все реализованные интерфейсы:
Context
- Прямые известные подклассы:
InitialDirContext
public class InitialContext extends Object implements Context
Этот класс является начальным контекстом для выполнения операций именования.
Все операции именования относятся к контексту. Начальный контекст реализует интерфейс Context и предоставляет отправную точку для разрешения имен.
При создании начального контекста его окружение инициализируется свойствами, определенными в параметре среды, переданном в конструктор, и во всех файлах ресурсов приложения.
JNDI определяет значение каждого свойства путем слияния значений из следующих двух источников в указанном порядке:
- Первое вхождение свойства из параметра среды конструктора и системных свойств.
- Файлы ресурсов приложения (
jndi.properties).
Context), все значения объединяются в один список, разделенный двоеточиями. Для других свойств используется только первое найденное значение. Реализация начального контекста определяется во время выполнения. Политика по умолчанию использует свойство среды "java.naming.factory.initial", которое содержит имя класса фабрики начального контекста. Исключение из этой политики применяется при разрешении строковых значений URL, как описано ниже.
Когда строковое значение URL (a String вида scheme_id:rest_of_name) передается в качестве параметра имени в любой метод, ищется фабрика контекста URL для обработки этой схемы и используется для разрешения URL. Если такая фабрика не найдена, используется начальный контекст, указанный "java.naming.factory.initial". Аналогично, когда объект CompositeName, первой частью которого является строка URL, передается в качестве параметра имени в любой метод, ищется фабрика контекста URL и используется для разрешения первой составляющей имени. См. NamingManager.getURLContext() для описания того, как ищутся фабрики контекста URL.
Данную политику по умолчанию поиска фабрик начального контекста и контекста URL можно переопределить, вызвав NamingManager.setInitialContextFactoryBuilder().
Исключение NoInitialContextException выбрасывается, когда начальный контекст не может быть создан. Это исключение может быть сгенерировано во время любого взаимодействия с InitialContext, а не только при создании InitialContext. Например, реализация начального контекста может лениво извлекать контекст только при вызове фактических методов. Приложение не должно зависеть от того, когда определяется существование начального контекста.
Когда свойство среды "java.naming.factory.initial" не равно null, конструктор InitialContext попытается создать начальный контекст, указанный в нём. В этот момент фабрика начального контекста может выбросить исключение, если возникнет проблема. Однако, когда она проверяет и сообщает пользователям начального контекста о проблемах, связанных со свойствами среды или подключением, зависит от реализации поставщика. Она может делать это лениво — откладывая до выполнения операции с контекстом, или сразу при создании контекста.
Экземпляр InitialContext не синхронизирован против одновременного доступа нескольких потоков. Несколько потоков, работающих с различными экземплярами InitialContext, не нуждаются в синхронизации. Потоки, которым нужно одновременное обращение к одному экземпляру InitialContext, должны синхронизироваться между собой и обеспечить необходимое блокирование.
- C:
- 1.3, JNDI 1.1
- См. также:
-
Context,NamingManager.setInitialContextFactoryBuilder
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected Context | defaultInitCtx | Поле, содержащее результат вызова NamingManager.getInitialContext(). |
protected boolean | gotDefault | Поле, указывающее, был ли получен начальный контекст вызовом NamingManager.getInitialContext(). |
protected Hashtable<Object,Object> | myProps | Окружение, связанное с этим InitialContext. |
Поля, объявленные в интерфейсе 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 Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
InitialContext() | Создает начальный контекст. | |
protected | InitialContext(boolean lazy) | Создает начальный контекст с возможностью не инициализировать его. |
InitialContext(Hashtable<?,?> environment) | Создаёт начальный контекст с использованием предоставленной среды. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String | composeName(String name,
String prefix) | Компонует имя этого контекста с именем, относительным к этому контексту. |
Name | composeName(Name name,
Name prefix) | Компонует имя этого контекста с именем, относительным к этому контексту. |
static <T> T | doLookup(String name) | Статический метод для получения именованного объекта. |
static <T> T | doLookup(Name name) | Статический метод для получения именованного объекта. |
protected Context | getDefaultInitCtx() | Получает начальный контекст, вызывая |
protected Context | getURLOrDefaultInitCtx(String name) | Получает контекст для разрешения строкового имени |
protected Context | getURLOrDefaultInitCtx(Name name) | Получает контекст для разрешения |
protected void | init(Hashtable<?,?> environment) | Инициализирует начальный контекст с использованием предоставленной среды. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, объявленные в интерфейсе javax.naming.Context
addToEnvironment, bind, bind, close, createSubcontext, createSubcontext, destroySubcontext, destroySubcontext, getEnvironment, getNameInNamespace, getNameParser, getNameParser, list, list, listBindings, listBindings, lookup, lookup, lookupLink, lookupLink, rebind, rebind, removeFromEnvironment, rename, rename, unbind, unbind Поля
myProps
protected Hashtable<Object,Object> myProps
Окружение, связанное с этим InitialContext. Инициализируется значением null и обновляется конструктором, принимающим окружение, или методом init().
- См. также:
-
Context.addToEnvironment(java.lang.String, java.lang.Object),Context.removeFromEnvironment(java.lang.String),Context.getEnvironment()
defaultInitCtx
protected Context defaultInitCtx
Поле, содержащее результат вызова NamingManager.getInitialContext(). Устанавливается методом getDefaultInitCtx() при первом его вызове. Последующие вызовы getDefaultInitCtx() возвращают значение defaultInitCtx.
- См. также:
getDefaultInitCtx()
gotDefault
protected boolean gotDefault
Поле, указывающее, получен ли начальный контекст путём вызова NamingManager.getInitialContext(). Если true, результат находится в defaultInitCtx.
Конструкторы
InitialContext
protected InitialContext(boolean lazy)
throws NamingException Создаёт начальный контекст с опцией неинициализации. Это может использоваться конструктором в подклассе, когда значение параметра окружения ещё неизвестно в момент вызова конструктора InitialContext. Конструктор подкласса вызовет этот конструктор, вычислит значение окружения и затем вызовет init() перед возвратом.
- Параметры:
-
lazy- true означает не инициализировать начальный контекст; false эквивалентно вызовуnew InitialContext() - Исключения:
-
NamingException- если возникает исключение именования - С:
- 1.3
- См. также:
init(Hashtable)
InitialContext
public InitialContext()
throws NamingException Создаёт начальный контекст. Свойства окружения не предоставляются. Эквивалентно new InitialContext(null).
- Исключения:
-
NamingException- если возникает исключение именования - См. также:
InitialContext(Hashtable)
InitialContext
public InitialContext(Hashtable<?,?> environment)
throws NamingException Создаёт начальный контекст, используя предоставленное окружение. Свойства окружения обсуждаются в описании класса.
Этот конструктор не будет изменять environment или сохранять ссылку на него, но может сохранить клон. Звонящий не должен изменять изменяемые ключи и значения в environment после того, как они были переданы в конструктор.
- Параметры:
-
environment- окружение, используемое для создания начального контекста. Значение null указывает на пустое окружение. - Исключения:
-
NamingException- если возникает исключение именования
Методы
init
protected void init(Hashtable<?,?> environment)
throws NamingException Инициализирует начальный контекст, используя предоставленное окружение. Свойства окружения обсуждаются в описании класса.
Этот метод будет изменять environment и сохранять ссылку на него. Звонящий больше не может его изменять.
- Параметры:
-
environment- окружение, используемое для создания начального контекста. Значение null указывает на пустое окружение. - Исключения:
-
NamingException- если возникает исключение именования - С:
- 1.3
- См. также:
InitialContext(boolean)
doLookup
public static <T> T doLookup(Name name)
throws NamingException Статический метод для получения объекта с именем. Это метод-костыль, эквивалентный вызову:
InitialContext ic = new InitialContext();
Object obj = ic.lookup();
Если name пустое, возвращает новый экземпляр этого контекста (который представляет тот же контекст именования, что и этот контекст, но его окружение может быть изменено независимо, и к нему можно получить доступ одновременно).
- Параметры типа:
-
T- тип возвращаемого объекта - Параметры:
-
name- имя объекта для поиска - Возвращает:
- объект, связанный с
name - Исключения:
-
NamingException- если возникает исключение именования - С:
- 1.6
- См. также:
-
doLookup(String),Context.lookup(Name)
doLookup
public static <T> T doLookup(String name)
throws NamingException Статический метод для получения объекта с именем. См. doLookup(Name) для подробностей.
- Параметры типа:
-
T- тип возвращаемого объекта - Параметры:
-
name- имя объекта для поиска - Возвращает:
- объект, связанный с
name - Исключения:
-
NamingException- если возникает исключение именования - С:
- 1.6
getDefaultInitCtx
protected Context getDefaultInitCtx()
throws NamingException Получает начальный контекст, вызывая NamingManager.getInitialContext() и кэширует его в defaultInitCtx. Устанавливает gotDefault для того, чтобы знать, что мы уже пробовали это ранее.
- Возвращает:
- Непустой кэшированный начальный контекст.
- Исключения:
-
NoInitialContextException- Если начальный контекст не найден. -
NamingException- Если возникло исключение именования.
getURLOrDefaultInitCtx
protected Context getURLOrDefaultInitCtx(String name)
throws NamingException Получает контекст для разрешения строкового имени name. Если имя name является строкой URL, то пытается найти контекст URL для него. Если он не найден или name не является строкой URL, то возвращает getDefaultInitCtx().
См. getURLOrDefaultInitCtx(Name) для описания того, как подкласс должен использовать этот метод.
- Параметры:
-
name- Непустое имя, для которого необходимо получить контекст. - Возвращает:
- Контекст URL для
nameили кэшированный начальный контекст. Результат не может быть null. - Исключения:
-
NoInitialContextException- Если начальный контекст не найден. -
NamingException- Если возникло исключение именования. - См. также:
NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
getURLOrDefaultInitCtx
protected Context getURLOrDefaultInitCtx(Name name)
throws NamingException Получает контекст для разрешения name. Если первый компонент имени name является строкой URL, то пытается найти контекст URL для него. Если он не найден или первый компонент name не является строкой URL, то возвращает getDefaultInitCtx().
При создании подкласса InitialContext используйте этот метод следующим образом. Определите новый метод, который использует этот метод для получения начального контекста нужного подкласса.
protected XXXContext getURLOrDefaultInitXXXCtx(Name name)
throws NamingException {
Context answer = getURLOrDefaultInitCtx(name);
if (!(answer instanceof XXXContext)) {
if (answer == null) {
throw new NoInitialContextException();
} else {
throw new NotContextException("Not an XXXContext");
}
}
return (XXXContext)answer;
} При предоставлении реализаций для новых методов в подклассе используйте этот недавно определённый метод для получения начального контекста. public Object XXXMethod1(Name name, ...) {
throws NamingException {
return getURLOrDefaultInitXXXCtx(name).XXXMethod1(name, ...);
}
- Параметры:
-
name- Непустое имя, для которого необходимо получить контекст. - Возвращает:
- Контекст URL для
nameили кэшированный начальный контекст. Результат не может быть null. - Исключения:
-
NoInitialContextException- Если начальный контекст не найден. -
NamingException- Если возникло исключение именования. - См. также:
NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
composeName
public String composeName(String name,
String prefix)
throws NamingException Составляет имя этого контекста с именем, относящимся к этому контексту. Поскольку начальный контекст никогда не может быть назван относительно любого контекста, кроме самого себя, значение параметра prefix должно быть пустым именем ("").
- Определено в:
-
composeNameв интерфейсеContext - Параметры:
-
name- имя, относящееся к этому контексту -
prefix- имя этого контекста относительно одного из его предков - Возвращает:
- составление
prefixиname - Исключения:
-
NamingException- если возникает исключение именования
composeName
public Name composeName(Name name,
Name prefix)
throws NamingException Составляет имя этого контекста с именем, относящимся к этому контексту. Поскольку начальный контекст никогда не может быть назван относительно любого контекста, кроме самого себя, значение параметра prefix должно быть пустым именем.
- Определено в:
-
composeNameв интерфейсеContext - Параметры:
-
name- имя, относящееся к этому контексту -
prefix- имя этого контекста относительно одного из его предков - Возвращает:
- составление
prefixиname - Исключения:
-
NamingException- если возникает исключение именования - См. также:
Context.composeName(String, String)
© 1993, 2020, 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/11/docs/api/java.naming/javax/naming/InitialContext.html