Интерфейс LdapContext

Все суперинтерфейсы:
Context, DirContext
Все известные реализующие классы:
InitialLdapContext
public interface LdapContext
extends DirContext

Этот интерфейс представляет контекст, в котором можно выполнять операции с управлениями LDAPv3-стиля и выполнять расширенные операции LDAPv3-стиля. Для приложений, которым не нужны такие управления или расширенные операции, следует использовать более общий интерфейс javax.naming.directory.DirContext.

Подробности использования управлений

Этот интерфейс предоставляет поддержку управлений LDAP v3. В общем случае эта поддержка позволяет программе-пользователю устанавливать управления запроса для операций LDAP, которые выполняются в ходе вызова методами Context/DirContext программы-пользователя, и читать управления ответа, полученные в результате операций LDAP. На уровне реализации существуют некоторые детали, которые должны понимать разработчики как программы-пользователя, так и поставщики услуг, для корректного использования управлений запроса и ответа.

Управления запроса

Существует два типа управлений запроса:

  • Управления запроса, влияющие на создание соединения
  • Управления запроса, влияющие на методы контекста
Первый тип используется всякий раз, когда требуется установить или повторно установить соединение с сервером LDAP. Второй тип используется, когда все остальные операции LDAP отправляются на сервер LDAP. Причина, по которой необходимо разграничивать эти два типа управлений запроса, заключается в том, что JNDI — это API высокого уровня, который не работает напрямую с соединениями. Задача поставщиков услуг — выполнять все необходимые операции управления соединениями. Следовательно, одно соединение может быть разделено несколькими экземплярами контекста, и поставщик услуг свободен использовать свои собственные алгоритмы для сохранения соединений и сетевого использования. Таким образом, при вызове метода на экземпляре контекста поставщик услуг, возможно, должен выполнить некоторые операции управления соединениями помимо выполнения соответствующих операций LDAP. Для управления соединениями используется управление запросом соединения, а для обычных операций LDAP используется управление запросом контекста.

Если не указано иное, термин «управления запроса» относится к управлениям запроса контекста.

Управления запроса контекста

Существует два способа, которыми экземпляр контекста получает управления запроса:
  1. ldapContext.newInstance(reqCtls)
  2. ldapContext.setRequestControls(reqCtls)
где ldapContext — экземпляр LdapContext. Указание null или пустого массива для reqCtls означает отсутствие управлений запроса. newInstance() создает новый экземпляр контекста, используя reqCtls, а setRequestControls() обновляет управления запросом существующего экземпляра контекста на reqCtls.

В отличие от свойств среды, управления запроса экземпляра контекста не наследуются экземплярами контекста, которые производятся из него. Производные экземпляры контекста имеют null в качестве управлений запроса контекста. Вы должны явно установить управления запроса производного экземпляра контекста, используя setRequestControls().

Управления запроса экземпляра контекста извлекаются с помощью метода getRequestControls().

Управления запроса соединения

Существует три способа установки управлений запроса соединения:
  1. new InitialLdapContext(env, connCtls)
  2. refException.getReferralContext(env, connCtls)
  3. ldapContext.reconnect(connCtls);
где refException — экземпляр LdapReferralException, а ldapContext — экземпляр LdapContext. Указание null или пустого массива для connCtls означает отсутствие управлений запроса соединения.

Как и свойства среды, управления запроса соединения контекста наследуются контекстами, которые производятся из него. Обычно вы инициализируете управления запроса соединения, используя конструктор InitialLdapContext или LdapReferralContext.getReferralContext(). Эти управления запроса соединения наследуются контекстами, которые используют одно и то же соединение — то есть контекстами, производными от исходного или контекстов пересылки.

Используйте reconnect() для изменения управлений запроса соединения контекста. Вызов ldapContext.reconnect() влияет только на соединение, используемое ldapContext и любыми новыми экземплярами контекста, которые производятся от ldapContext. Контексты, которые ранее использовали соединение с ldapContext остаются неизменными. То есть управления запроса соединения контекста должны быть явно изменены и не влияют на изменения управлений запроса соединения другого контекста.

Управления запроса соединения экземпляра контекста извлекаются с помощью метода getConnectControls().

Требования к поставщику услуг

Поставщик услуг поддерживает управления запросом соединения и контекста следующим образом. Управления запроса контекста должны быть связаны на основе каждого экземпляра контекста, а управления запросом соединения — на основе каждого экземпляра соединения. Поставщик услуг должен искать управления запросом соединения в свойстве среды «java.naming.ldap.control.connect» и передавать это свойство среды экземплярам контекста, которые он создает.

Управления ответа

Метод LdapContext.getResponseControls() используется для получения управлений ответа, сгенерированных операциями LDAP, выполненными в результате вызова операции Context/DirContext. Результатом являются все управления ответа, сгенерированные базовыми операциями LDAP, включая любое неявное повторное подключение. Чтобы получить только управления ответа повторного подключения, используйте reconnect() и затем getResponseControls().

Параметры

Массив Control[], переданный в качестве параметра любому методу, принадлежит вызывающему объекту. Поставщик услуг не будет изменять массив или хранить на него ссылку, хотя он может хранить ссылки на отдельные объекты Control в массиве. Массив Control[], возвращаемый любым методом, является неизменяемым и не может быть изменен ни вызывающим объектом, ни поставщиком услуг.
С:
1.3
См. также:
InitialLdapContext, LdapReferralException.getReferralContext(java.util.Hashtable,javax.naming.ldap.Control[])

Поля

Модификатор и тип Поле Описание
static String CONTROL_FACTORIES

Константа, которая содержит имя свойства среды для указания списка фабрик управлений для использования.

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

Поля, объявленные в интерфейсе javax.naming.directory.DirContext

ADD_ATTRIBUTE, REMOVE_ATTRIBUTE, REPLACE_ATTRIBUTE

Методы

Модификатор и тип Метод Описание
ExtendedResponse extendedOperation​(ExtendedRequest request)

Выполняет расширенную операцию.

Control[] getConnectControls()

Возвращает управления запросом соединения, действующие для данного контекста.

Control[] getRequestControls()

Возвращает управления запросом, действующие для данного контекста.

Control[] getResponseControls()

Возвращает управления ответами, полученными в результате последнего метода, вызванного в данном контексте.

LdapContext newInstance​(Control[] requestControls)

Создает новый экземпляр этого контекста, инициализированного с помощью управлений запросом.

void reconnect​(Control[] connCtls)

Подключается к серверу LDAP с использованием предоставленных управлений и среды данного контекста.

void setRequestControls​(Control[] requestControls)

Устанавливает управления запросом для методов, которые будут вызваны впоследствии в данном контексте.

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

Методы, объявленные в интерфейсе javax.naming.directory.DirContext

bind, bind, createSubcontext, createSubcontext, getAttributes, getAttributes, getAttributes, getAttributes, getSchema, getSchema, getSchemaClassDefinition, getSchemaClassDefinition, modifyAttributes, modifyAttributes, modifyAttributes, modifyAttributes, rebind, rebind, search, search, search, search, search, search, search, search

Поля

CONTROL_FACTORIES

static final String CONTROL_FACTORIES

Константа, содержащая имя свойства среды для указания списка используемых фабрик управления. Значение свойства должно быть списком, разделенным двоеточиями, полных квалифицированных имён классов фабричных классов, которые создадут элемент управления, учитывая другой элемент управления. Подробнее см. ControlFactory.getControlInstance() . Это свойство может быть указано в среде, свойстве системы или в одном или нескольких файлах ресурсов.

Значение этой константы — "java.naming.factory.control".

См. также:
ControlFactory, Context.addToEnvironment(java.lang.String, java.lang.Object), Context.removeFromEnvironment(java.lang.String), Значения константных полей

Методы

extendedOperation

ExtendedResponse extendedOperation(ExtendedRequest request)
                            throws NamingException

Выполняет расширенную операцию. Этот метод используется для поддержки расширенных операций LDAPv3.

Параметры:
request - Запрос, который необходимо выполнить (не может быть null).
Возвращает:
Возможный ответ операции (null). null означает, что операция не сгенерировала никакого ответа.
Исключения:
NamingException - Если при выполнении расширенной операции произошла ошибка.

newInstance

LdapContext newInstance(Control[] requestControls)
                 throws NamingException

Создаёт новый экземпляр этого контекста, инициализированного с помощью управляющих элементов запроса. Этот метод является удобным методом для создания нового экземпляра этого контекста в целях многопоточного доступа. Например, если несколько потоков хотят использовать разные управляющие элементы запроса контекста, каждый поток может использовать этот метод для получения собственной копии этого контекста и установки/получения управляющих элементов запроса контекста без необходимости синхронизации с другими потоками.

Новый контекст имеет те же свойства среды и управляющие элементы запроса соединения, что и этот контекст. Подробности см. в описании класса. Реализации также могут позволить этому контексту и новому контексту совместно использовать одно и то же сетевое соединение или другие ресурсы, если это не препятствует независимости ни одного контекста.

Параметры:
requestControls - Возможно нулевые управляющие элементы запроса для использования в новом контексте. Если null, контекст инициализируется без управляющих элементов запроса.
Возвращает:
Экземпляр LdapContext (не null).
Исключения:
NamingException - Если при создании нового экземпляра произошла ошибка.
См. также:
InitialLdapContext

reconnect

void reconnect(Control[] connCtls)
        throws NamingException

Подключается к серверу LDAP с использованием предоставленных управляющих элементов и среды этого контекста.

Этот метод является способом явного инициирования операции «связывания» LDAP. Например, вы можете использовать этот метод для установки управляющих элементов запроса для операции «связывания» LDAP или для явного подключения к серверу, чтобы получить управляющие элементы ответа, возвращаемые операцией «связывания» LDAP.

Этот метод устанавливает управляющие элементы запроса соединения этого контекста в качестве новых управляющих элементов запроса соединения. Управляющие элементы запроса контекста этого контекста не затрагиваются. После вызова этого метода любые последующие неявные повторные подключения будут выполняться с использованием connCtls. connCtls также используются в качестве управляющих элементов запроса соединения для новых экземпляров контекста, полученных из этого контекста. Эти управляющие элементы запроса соединения не затрагиваются setRequestControls().

Реализаторы поставщиков услуг должны прочитать раздел «Поставщик услуг» в описании класса для получения подробностей реализации.

Параметры:
connCtls - Возможно нулевые управляющие элементы. Если null, управляющие элементы не используются.
Исключения:
NamingException - Если при повторном подключении произошла ошибка.
См. также:
getConnectControls(), newInstance(javax.naming.ldap.Control[])

getConnectControls

Control[] getConnectControls()
                      throws NamingException

Получает управляющие элементы запроса соединения, действующие для этого контекста. Управляющие элементы принадлежат реализации JNDI и неизменяемы. Ни массив, ни сами управляющие элементы не могут быть изменены вызывающей стороной.

Возвращает:
Возможный нулевой массив управляющих элементов. null означает, что управляющие элементы соединения не были установлены для этого контекста.
Исключения:
NamingException - Если при получении управляющих элементов запроса произошла ошибка.

setRequestControls

void setRequestControls(Control[] requestControls)
                 throws NamingException

Устанавливает управляющие элементы запроса для методов, которые впоследствии вызываются в этом контексте. Управляющие элементы запроса принадлежат реализации JNDI и неизменяемы. Ни массив, ни управляющие элементы не могут быть изменены вызывающей стороной.

Это удаляет любые предыдущие управляющие элементы запроса и добавляет requestControls для использования последующими методами, вызываемыми в этом контексте. Этот метод не влияет на управляющие элементы запроса соединения этого контекста.

Обратите внимание, что requestControls будут действовать до следующего вызова setRequestControls(). Вам необходимо явно вызвать setRequestControls() с null или пустым массивом, чтобы очистить управляющие элементы, если вы не хотите, чтобы они больше влияли на методы контекста. Чтобы проверить, какие управляющие элементы запроса действуют для данного контекста, используйте getRequestControls().

Параметры:
requestControls - Возможно нулевые управляющие элементы. Если null, управляющие элементы не используются.
Исключения:
NamingException - Если при установке управляющих элементов запроса произошла ошибка.
См. также:
getRequestControls()

getRequestControls

Control[] getRequestControls()
                      throws NamingException

Получает управляющие элементы запроса, действующие для этого контекста. Управляющие элементы запроса принадлежат реализации JNDI и неизменяемы. Ни массив, ни сами управляющие элементы не могут быть изменены вызывающей стороной.

Возвращает:
Возможный нулевой массив управляющих элементов. null означает, что управляющие элементы запроса не были установлены для данного контекста.
Исключения:
NamingException - Если при получении управляющих элементов запроса произошла ошибка.
См. также:
setRequestControls(javax.naming.ldap.Control[])

getResponseControls

Control[] getResponseControls()
                       throws NamingException

Получает управляющие элементы ответа, полученные в результате последнего вызова метода в этом контексте. Управляющие элементы ответа принадлежат реализации JNDI и неизменяемы. Ни массив, ни сами управляющие элементы не могут быть изменены вызывающей стороной.

Эти управляющие элементы ответа могут быть сгенерированы успешной или неудачной операцией.

При вызове метода контекста, который может возвращать управляющие элементы ответа, управляющие элементы ответа от предыдущего вызова метода очищаются. getResponseControls() возвращает все управляющие элементы ответа, сгенерированные операциями LDAP, используемыми методом контекста, в порядке получения от сервера LDAP. Вызов getResponseControls() не очищает управляющие элементы ответа. Вы можете вызывать его многократно (и получать те же управляющие элементы) до тех пор, пока не будет вызван следующий метод контекста, который может вернуть управляющие элементы.

Возвращает:
Возможный нулевой массив управляющих элементов. Если null, предыдущий метод, вызванный в этом контексте, не сгенерировал никаких управляющих элементов.
Исключения:
NamingException - Если при получении управляющих элементов ответа произошла ошибка.

© 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/ldap/LdapContext.html

Spec-Zone .ru
спецификации, руководства, описания, API