Class NamingManager
- java.lang.Object
-
- javax.naming.spi.NamingManager
- Direct Known Subclasses:
- DirectoryManager
public class NamingManager extends Object
В этом классе содержатся методы для создания объектов контекста и объектов, на которые ссылаются сведения о местоположении в службе именования или каталога.
Этот класс не может быть инстанцирован. Он имеет только статические методы.
В документации к этому классу упоминание URL относится к строке URL, определённой RFC 1738 и соответствующими RFC. Это любая строка, которая соответствует синтаксису, описанному в них, и может не всегда иметь соответствующую поддержку в классе java.net.URL или веб-браузерах.
NamingManager безопасен для одновременного доступа нескольких потоков.
За исключением случаев, когда указано иное, параметр Name или параметр среды, передаваемые любому методу, принадлежит вызывающей стороне. Реализация не будет изменять объект или хранить на него ссылку, хотя она может хранить ссылку на клон или копию.
- Since:
- 1.3
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static String |
CPE Константа, содержащая имя свойства среды, в которое |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
static Context |
getContinuationContext(CannotProceedException cpe) Создаёт контекст для продолжения операции контекста. |
static Context |
getInitialContext(Hashtable<?,?> env) Создаёт начальный контекст с использованием указанных свойств среды. |
static Object |
getObjectInstance(Object refInfo,
Name name,
Context nameCtx,
Hashtable<?,?> environment) Создаёт экземпляр объекта для указанного объекта и среды. |
static Object |
getStateToBind(Object obj,
Name name,
Context nameCtx,
Hashtable<?,?> environment) Возвращает состояние объекта для связывания. |
static Context |
getURLContext(String scheme,
Hashtable<?,?> environment) Создаёт контекст для заданного идентификатора схемы URL. |
static boolean |
hasInitialContextFactoryBuilder() Определяет, был ли установлен создатель начального контекста. |
static void |
setInitialContextFactoryBuilder(InitialContextFactoryBuilder builder) Устанавливает создатель InitialContextFactory в builder. |
static void |
setObjectFactoryBuilder(ObjectFactoryBuilder builder) ObjectFactoryBuilder определяет политику, используемую при попытке загрузить фабрики объектов. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Поля
CPE
public static final String CPE
Константа, содержащая имя свойства среды, в которое getContinuationContext() сохраняет значение своего параметра CannotProceedException. Это свойство наследуется контекстом продолжения и может быть использовано поставщиком сервисов этого контекста для проверки полей исключения.
Значение этой константы равно "java.naming.spi.CannotProceedException".
- С момента:
- 1.3
- См. также:
-
getContinuationContext(javax.naming.CannotProceedException), Значения постоянных полей
Методы
setObjectFactoryBuilder
public static void setObjectFactoryBuilder(ObjectFactoryBuilder builder)
throws NamingException ObjectFactoryBuilder определяет политику, используемую при попытке загрузить фабрики объектов. См. getObjectInstance() и класс ObjectFactory для описания политики по умолчанию. setObjectFactoryBuilder() переопределяет эту политику по умолчанию, установив ObjectFactoryBuilder. Последующие фабрики объектов будут загружаться и создаваться с использованием установленного билдера.
Билдер может быть установлен только в том случае, если выполняющейся нити разрешено (методом security manager's checkSetFactory()) сделать это. После установки билдер нельзя заменить.
- Параметры:
-
builder- Устанавливаемый билдер фабрики. Если null, билдер не устанавливается. - Использует:
-
SecurityException- билдер не может быть установлен по причинам безопасности. -
NamingException- билдер не может быть установлен по причине, не связанной с безопасностью. -
IllegalStateException- Если фабрика уже установлена. - См. также:
-
getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>),ObjectFactory,ObjectFactoryBuilder,SecurityManager.checkSetFactory()
getObjectInstance
public static Object getObjectInstance(Object refInfo,
Name name,
Context nameCtx,
Hashtable<?,?> environment)
throws Exception Создаёт экземпляр объекта для указанного объекта и среды.
Если установлен билдер фабрики объектов, он используется для создания фабрики для создания объекта. В противном случае используются следующие правила для создания объекта:
- Если
refInfoявляетсяReferenceилиReferenceable, содержащим имя класса фабрики, используется указанная фабрика для создания объекта. ВозвращаетrefInfoв случае, если фабрика не может быть создана. В JDK 1.1, если класс фабрики должен быть загружен из места, указанного в ссылке, должен быть установленSecurityManager, в противном случае создание фабрики завершится ошибкой. Если при создании фабрики возникает исключение, оно передаётся вызывающему методу. - Если
refInfoявляетсяReferenceилиReferenceableбез имени класса фабрики, а адрес или адреса являютсяStringRefAddrс типом адреса "URL", используется фабрика контекста URL, соответствующая идентификатору схемы каждого URL, для создания объекта (см.getURLContext()). Если это не удалось, переходим к следующему шагу. - Используются фабрики объектов, указанные в свойстве
Context.OBJECT_FACTORIESсреды и в файле ресурсов поставщика, связанного сnameCtx, в таком порядке. Значение этого свойства представляет собой список имён классов фабрик, разделённых двоеточием, которые перебираются в указанном порядке, и первая, успешно создавшая объект, используется. Если ни одна из фабрик не может быть загружена, возвращаетсяrefInfo. Если при создании объекта возникает исключение, исключение передаётся вызывающему методу.
Поставщики сервисов, реализующие интерфейс DirContext, должны использовать DirectoryManager.getObjectInstance(), а не этот метод. Поставщики сервисов, реализующие только интерфейс Context, должны использовать этот метод.
Обратите внимание, что фабрика объектов (объект, реализующий интерфейс ObjectFactory) должна быть общедоступной и должна иметь общедоступный конструктор без аргументов.
Параметры name и nameCtx необязательно могут быть использованы для указания имени создаваемого объекта. name — имя объекта, относительно контекста nameCtx. Эта информация может быть полезна фабрике объектов или реализации объекта. Если существует несколько возможных контекстов, из которых объект может быть назван (как часто бывает), вызывающий метод должен выбрать один. Хорошим правилом является выбор "самого глубокого" доступного контекста. Если nameCtx равен null, name относится к контексту по умолчанию.
Если имя не задаётся, параметр name должен быть null.
- Параметры:
-
refInfo- Возможно нулевой объект, для которого необходимо создать объект. -
name- Имя этого объекта относительноnameCtx. Задание имени необязательно; если оно опускается,nameдолжен быть null. -
nameCtx- Контекст, относительно которого задан параметрname. Если null,nameотносится к контексту по умолчанию. -
environment- Возможно нулевая среда, используемая при создании фабрики объектов и объекта. - Возвращает:
- Объект, созданный с помощью
refInfo; илиrefInfoесли объект не может быть создан с использованием описанного выше алгоритма. - Использует:
-
NamingException- если при попытке получить контекст URL возникло исключение именования, или если одна из обращённых фабрик выбрасывает NamingException. -
Exception- если одна из обращённых фабрик выбрасывает исключение, или если при загрузке и создании классов фабрики и объекта возникла ошибка. Фабрика должна выбрасывать исключение только в случае, если она не хочет, чтобы другие фабрики использовались в попытке создать объект. См. ObjectFactory.getObjectInstance(). - См. также:
-
getURLContext(java.lang.String, java.util.Hashtable<?, ?>),ObjectFactory,ObjectFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
getURLContext
public static Context getURLContext(String scheme,
Hashtable<?,?> environment)
throws NamingException Создаёт контекст для данной схемы URL.
Полученный контекст предназначен для разрешения URL-адресов схемы scheme. Результирующий контекст не привязан к конкретному URL-адресу. Он может обрабатывать произвольные URL-адреса с указанной схемой.
Имя класса фабрики, создающей результирующий контекст, имеет соглашение об именовании идентификатор-схемыURLContextFactory (например, "ftpURLContextFactory" для "ftp" идентификатора схемы) в указанном пакете. Свойство среды Context.URL_PKG_PREFIXES (которое может содержать значения, взятые из параметров апплетов, системных свойств или файлов ресурсов приложения) содержит список префиксов пакетов, разделённых двоеточием. Каждый префикс пакета в свойстве проверяется в заданном порядке для загрузки класса фабрики. Префикс пакета по умолчанию — "com.sun.jndi.url" (если ни один из указанных пакетов не работает, используется этот префикс по умолчанию). Полное имя пакета формируется путём конкатенации префикса пакета и идентификатора схемы.
Например, если идентификатор схемы — "ldap", а свойство Context.URL_PKG_PREFIXES содержит "com.widget:com.wiz.jndi", менеджер именования будет пытаться загрузить следующие классы до тех пор, пока один не будет успешно создан:
- com.widget.ldap.ldapURLContextFactory
- com.wiz.jndi.ldap.ldapURLContextFactory
- com.sun.jndi.url.ldap.ldapURLContextFactory
Если фабрика создана, она вызывается с указанными параметрами для получения результирующего контекста.
factory.getObjectInstance(null, environment);
Например, вызов getObjectInstance() на фабрике контекста URL LDAP вернёт контекст, способный разрешать URL-адреса LDAP (например, "ldap://ldap.wiz.com/o=wiz,c=us", "ldap://ldap.umich.edu/o=umich,c=us", ...).
Обратите внимание, что фабрика объектов (объект, реализующий интерфейс ObjectFactory) должна быть общедоступной и должна иметь общедоступный конструктор без аргументов.
- Параметры:
-
scheme- Не нулевой идентификатор схемы URL, поддерживаемый контекстом. -
environment- Возможно нулевые свойства среды, используемые при создании фабрики объектов и контекста. - Возвращает:
- Контекст для разрешения URL-адресов со схемой
scheme;nullесли фабрика для создания контекста не найдена. - Использует:
-
NamingException- Если при создании контекста возникает исключение именования. - См. также:
-
getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>),ObjectFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
getInitialContext
public static Context getInitialContext(Hashtable<?,?> env)
throws NamingException Создаёт начальный контекст с использованием указанных свойств среды.
Если установлен билдер InitialContextFactory, он используется для создания фабрики для создания начального контекста. В противном случае используется класс, указанный в свойстве Context.INITIAL_CONTEXT_FACTORY среды. Обратите внимание, что фабрика начального контекста (объект, реализующий интерфейс InitialContextFactory) должна быть общедоступной и должна иметь общедоступный конструктор без аргументов.
- Параметры:
-
env- Возможно нулевые свойства среды, используемые при создании контекста. - Возвращает:
- Не нулевой начальный контекст.
- Использует:
-
NoInitialContextException- Если свойствоContext.INITIAL_CONTEXT_FACTORYне найдено или указывает на несуществующий класс или класс, который нельзя создать, или если начальный контекст не может быть создан по какой-либо другой причине. -
NamingException- Если возникло другое исключение именования. - См. также:
-
InitialContext,InitialDirContext
setInitialContextFactoryBuilder
public static void setInitialContextFactoryBuilder(InitialContextFactoryBuilder builder)
throws NamingException Устанавливает билдер InitialContextFactory в билдер.
Билдер может быть установлен только в том случае, если выполняющейся нити разрешено сделать это менеджером безопасности. После установки билдер нельзя заменить.
- Параметры:
-
builder- Исходный билдер фабрики контекста для установки. Если null, то билдер не устанавливается. - Исключения:
-
SecurityException- билдер не может быть установлен по соображениям безопасности. -
NamingException- билдер не может быть установлен по причинам, не связанным с безопасностью. -
IllegalStateException- Если билдер был установлен ранее. - См. также:
-
hasInitialContextFactoryBuilder(),SecurityManager.checkSetFactory()
hasInitialContextFactoryBuilder
public static boolean hasInitialContextFactoryBuilder()
Определяет, был ли установлен билдер исходной фабрики контекста.
- Возвращает:
- true, если билдер исходной фабрики контекста был установлен; false в противном случае.
- См. также:
setInitialContextFactoryBuilder(javax.naming.spi.InitialContextFactoryBuilder)
getContinuationContext
public static Context getContinuationContext(CannotProceedException cpe)
throws NamingException Создает контекст для продолжения операции контекста.
При выполнении операции с именем, охватывающим несколько пространств имен, контекст одной системы именования может потребоваться передать операцию следующей системе именования. Реализация контекста делает это, сначала создав CannotProceedException, содержащий информацию о том, как далеко она продвинулась. Затем она получает контекст продолжения от JNDI, вызвав getContinuationContext. После этого реализация контекста должна возобновить операцию контекста, вызвав ту же операцию в контексте продолжения, используя оставшуюся часть имени, которая еще не была разрешена.
Перед использованием параметра cpe, этот метод обновляет окружение, связанное с этим объектом, устанавливая значение свойства CPE в cpe. Это свойство будет унаследовано контекстом продолжения и может быть использовано поставщиком услуг этого контекста для проверки полей этого исключения.
- Параметры:
-
cpe- Исключение, не равное null, которое вызвало это продолжение. - Возвращает:
- Объект Context, не равный null, для продолжения операции.
- Исключения:
-
NamingException- Если произошла ошибка именования.
getStateToBind
public static Object getStateToBind(Object obj,
Name name,
Context nameCtx,
Hashtable<?,?> environment)
throws NamingException Возвращает состояние объекта для связывания.
Поставщики услуг, реализующие интерфейс DirContext, должны использовать DirectoryManager.getStateToBind(), а не этот метод. Поставщики услуг, реализующие только интерфейс Context, должны использовать этот метод.
Этот метод использует указанные фабрики состояний в свойстве Context.STATE_FACTORIES из свойств среды и из файла ресурсов поставщика, связанного с nameCtx, в указанном порядке. Значение этого свойства представляет собой список имён классов фабрик, разделенных двоеточием, которые проверяются в порядке следования. Первая, успешно вернувшая состояние объекта, и будет использоваться. Если состояние объекта не может быть получено таким образом, возвращается сам объект. Если при получении состояния возникает ошибка, исключение передаётся вызывающему методу.
Обратите внимание, что фабрика состояний (объект, реализующий интерфейс StateFactory) должна быть публичной и иметь публичный конструктор, принимающий на вход ноль аргументов.
Параметры name и nameCtx могут быть необязательно использованы для указания имени создаваемого объекта. Подробности см. в описании "Имя и параметры контекста" в ObjectFactory.getObjectInstance().
Этот метод может вернуть объект Referenceable. Поставщик услуг, получающий этот объект, может выбрать хранение его непосредственно или извлечение ссылки (используя Referenceable.getReference()) и хранение её вместо этого.
- Параметры:
-
obj- Объект, не равный null, для которого необходимо получить состояние для привязки. -
name- Имя этого объекта относительноnameCtx, или null, если имя не указано. -
nameCtx- Контекст, относительно которого указан параметрname, или null, еслиnameотносится к контексту по умолчанию. -
environment- Возможно null окружение, используемое при создании фабрики состояний и состояния объекта. - Возвращает:
- Объект, не равный null, представляющий состояние объекта
objдля привязки. Это может быть сам объект (obj) - Исключения:
-
NamingException- Если одна из фабрик генерирует исключение, или при загрузке и инициализации классов фабрики и объекта произошла ошибка. Фабрика должна генерировать исключение только в случае, если она не хочет, чтобы другие фабрики использовались в попытке создать объект. См.StateFactory.getStateToBind(). - С:
- 1.3
- См. также:
-
StateFactory,StateFactory.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>),DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
© 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.