Usamos Context.rename()
para renombrar un objeto en el directorio. En el
LDAP v2, esto
corresponde con la operación "modify RDN" que renombra una entrada dentro del
mismo contexto. En el LDAP
v3, esto corresponde con la operación "modify DN", que es como "modify RDN,"
excepto en que la entrada nueva y la vieja no tienen que estar en el mismo contexto.
Podemos usar Context.rename() para renombrar una entrada
hoja o un nodo interior. El siguiente código renombra un nodo interior de
"ou=NewHires" como
"ou=OldHires".
Con el LDAP v3, podemos renombrar una entrada a una parte diferente del DIT. Para hacer esto usando Context.rename(), debemos usar un contexto que sea el ancestro común para la nueva y vieja entrada. Por ejemplo, para renombrar "cn=C. User, ou=NewHires, o=JNDITutorial" como "cn=C. User, ou=People, o=JNDITutorial", debemos usar el contexto llamado "o=JNDITutorial". Abajo tenemos un ejemplo que demuestra esto. Si intentamos ejecutar este ejemplo en unservidor LDAP v2, obtendremos una InvalidNameException porque la versión 2 no soporta esta caracterísitica.
El Netscape Directory Server v4.1 no soporta el renombrado con diferentes nodos padre. Si ejecutamos este ejemplo usando ese servidor, obtendremos una CommunicationException (indicando un "error de protocolo").
Mantener los Atributos del Viejo Nombre
En LDAP, cuando renombramos una entrada, tenemos la opción de mantener el RDN de la vieja entrada como un atributo de la entrada actualizada. Por ejemplo, si renombramos la entrada "cn=C. User" como "cn=Claude User", podemos especifcar si queremos que se mantenga como un atributo el viejo RDN "cn=C. User".
Para especificar si queremos mantener el atributo del nombre antiguo cuando usamos Context.rename(), debemos usar la propiedad de entorno "java.naming.ldap.deleteRDN". Si el valor de esta propiedad es "true" (por defecto) el RDN antiguo será eliminado. Si el valor es "false", entonces el RDN antiguo se mantendrá como un atributo de la entrada actualizada.
// 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");