Desreferenciar Alias
En el X.500, podemos seleccionar una entrada hoja para que apunte a otro objeto en el espacio de nombres.
Llamado un alias de entrada,
contiene el DN del objeto al que apunta. Cuando buscamos un objeto usando el alias, ese es
desrefenciado por lo que realmente de devuelve es el objeto apuntado por el DN del alias.
Podemos usar los alias para organizar el espacio de nombres del directorio, para que se pudieran utilizar los
nombres viejos en el espacio de nombres involucrado. Supongamos, por ejemplo, que en la compañia
"o=Wiz, c=us", los departamentos "ou=hardware" y
"ou=software" se han mezclado dentro de "ou=engineering".
Podemos mover los contenidos de "ou=hardware" y
"ou=software" a
"ou=engineering", y cambiar las entradas
"ou=hardware" y
"ou=software" dentro de alias de entrada para que apunten a
"ou=engineering".
En LDAP, los alias se soportan de la misma forma que en X.500.
Cuando usamos el proveedor de servicio LDAP de Sun, podemos controlar cómo se
desreferencian los Alias de cuatro formas distintas, usando la propiedad de entorno
"java.naming.ldap.derefAliases", como se muestra en la
siguiente tabla. Si esta propiedad no está configurada, el valor por defecto es
"always".
| Valor de Propeidad |
Descripción |
| always |
Siempre desreferencia los alias. |
| never |
Nunca desreferencia los alias. |
| finding |
Desreferencia los alías sólo durante la resolución de
nombres. |
| searching |
Desreferencia los alias sólo después de la resolución de nombres. |
En el LDAP, estos cuatro modos de desreferenciar alias sólo afectan a las peraciónde
"búsqueda". No se hace ninguna desreferenciación para las operación de actualización
"modify," "add," y "delete."
De forma similar, en el JNDI, no se hace ninguna desreferencia para los métodos de
actualización en los interfaces
Context and DirContext.
La propiedad de entorno "java.naming.ldap.derefAliases"
afecta a todos los métodos que lean desde el directorio.
Observa también que la bandera"dereference links" en la clase
SearchControls
no está relacionada con los alias.
Ejemplo de Desrefenciación de Alias
El siguiente ejemplo
demustra cómo afecta la propiedad de entorno "java.naming.ldap.derefAliases"
a las operación "search". Acepta como argumento de la línea de comandos una de las
cuatro posibles selecciones para
"java.naming.ldap.derefAliases". Si no se especifica
ningún argumento, entonces la propiedad de entorno no se configura (que es equivalente a
configurarla con "always").
Para este ejemplo, el directorio de configurado con dos alias, de esta forma:
- "ou=Staff" es un alias que apunta a
"ou=People". Si listamos el contexto de
"ou=Staff", veremos los contenidos
del contexto "ou=People".
- "cn=Newbie, ou=People" es un alias que apunta a la
entrada "cn=J. Duke, ou=NewHires".
Después de configurar la propiedad de entorno, el ejemplo realiza una búsqueda sobre el
contexto "ou=Staff" de todas las entrafas cuyo
atributo "cn" empiece con "J." Aquí está el fragmento de
código que configura la propiedad de entorno y realiza la búsqueda:
if (args.length > 0) {
// Set the dereference flag as requested
env.put("java.naming.ldap.derefAliases", args[0]);
}
// Create the initial context
DirContext ctx = new InitialDirContext(env);
// Perform the search
NamingEnumeration answer = ctx.search("ou=Staff", "(cn=J*)", null);
La siguiente tabla sumariza los resultados de la ejecución de esre programa con diferentes
argumentos en la línea de comandos.
| Argumento de la Línea de Comandos |
Resultados |
| (none) |
Tres entradas: "cn=Jon Ruiz",
"cn=John Fowler",
"cn=J.Duke" |
| always |
Tres entradas."cn=Jon Ruiz", "cn=John
Fowler", "cn=J.Duke" |
| never |
Cero (porque el alias "ou=Staff" no se
desreferencia nunca) |
| finding |
Dos entradas: "cn=Jon Ruiz" y
"cn=John Fowler" (porque el alias
"cn=Newbie" no se desreferencia nunca) |
| searching |
Cero (porque el alias "ou=Staff" nunca se desreferencia) |
|
Nota:
El Netscape Directory Server
v4.1 no soporta alias. Si ejecutas este ejemplo usando ese servidor, el
resultado será siempre como si se hubiera seleccionado "never".
|
Cuando ejecutamos estos ejemplo, los nombres de las entradas
(NameClassPair.getName())
que obtenemos de vuelta son URLs LDAP que contienen los nombres totalmente cualificados de
las entradas. Si llamamos a
NameClassPair.isRelative()
sobre ellos, entonces el método devuelve false. Esto es
porque se sigue el alias, alcanza otra parte del espacio de nombres que ya no estará
nombrada en relación al contexto "ou=Staff".