Spec-Zone .ru
спецификации, руководства, описания, API
След: Именование Java и Интерфейс Каталога
Урок: Усовершенствованные Темы для Пользователей LDAP
Больше Операций LDAP
Домашняя страница > Именование Java и Интерфейс Каталога > Усовершенствованные Темы для Пользователей LDAP

Больше Операций LDAP

Остальная часть урока LDAP покрывает, как JNDI обеспечивает возможность выполнить определенные интересные операции LDAP.

Переименование Объектов

Вы используете Context.rename(), чтобы переименовать объект в каталоге. В LDAP v2, это соответствует, "изменяют RDN" работа, которая переименовывает запись в пределах того же самого контекста (то есть, переименовывая одноуровневый элемент). В LDAP v3, это соответствует, "изменяют DN" работа, которая походит, "изменяют RDN," за исключением того, что старые и новые записи не должны быть в том же самом контексте. Можно использовать Context.rename(), чтобы переименовать листовую запись или внутренний узел. Пример, показанный в уроке Операций Именования и Каталога, переименовывает листовую запись. Следующий code переименовывает внутренний узел от "ou=NewHires" до "ou=OldHires":

ctx.rename("ou=NewHires", "ou=OldHires");

Отметьте: Сервер каталогов v5.2 Java Sun не поддерживает переименовывающие внутренние узлы. Если Вы выполните этот пример, то Вы получите ContextNotEmptyException.

Переименование к Различной Части DIT

С LDAP v3, можно переименовать запись в различную часть DIT. Чтобы сделать это при использовании Context.rename(), следует использовать контекст, который является общим предком и для нового и для старых записей. Например, чтобы переименовать "cn=C. User, ou=NewHires, o=JNDITutorial" к "cn=C. User, ou=People, o=JNDITutorial", следует использовать контекст, названный "o=JNDITutorial". Следующее an example это демонстрирует это. Если Вы попытаетесь выполнить этот пример против LDAP v2 сервер, то Вы получите InvalidNameException, потому что версия 2 не поддерживает эту функцию.

ctx.rename("cn=C. User, ou=NewHires", "cn=C. User, ou=People");

Отметьте: Сервер каталогов v5.2 Java Sun не поддерживает переименование с различными родительскими узлами. Если Вы выполните этот пример при использовании того сервера, то Вы получите OperationNotSupportedException (указание на "ошибку протокола").

Хранение Атрибутов Старого названия

В LDAP, когда Вы переименовываете запись, у Вас есть опция хранения старого RDN записи как атрибут обновленной записи. Например, если Вы переименовываете запись "cn=C. User" к "cn=Claude User", можно определить, хотите ли Вы, чтобы старый "cn=C. User" RDN был сохранен как атрибут.

Чтобы определить, хотите ли Вы сохранить атрибут старого названия, когда Вы используете Context.rename(), используйте свойство среды "java.naming.ldap.deleteRDN". Если значением этого свойства является "true" (значение по умолчанию), старый RDN удаляется. Если его значением является "false", то старый RDN сохраняется как атрибут обновленной записи. Полный пример here.

// Set the property to keep RDN
env.put("java.naming.ldap.deleteRDN", "false");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// Perform the rename
ctx.rename("cn=C. User, ou=NewHires", "cn=Claude User,ou=NewHires");

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: SSL и Пользовательские Сокеты
Следующая страница: LDAP Сравниваются