Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Composición Dinámica de Nombres

Para componer nombres, normalmente usamos métodos del interface Name.

La sección Nombres Mixtos explicó cómo añadir componentes a un nombre mixto y la sección Nombres Compuestos explicó cómo añadir componentes a un nombre compuesto.

Estos métodos son útiles cuando conocemos que estamos tratando con nombres mixtos o nombres compuestos. Pero ¿qué pasa si tenermos un nombre mixto y necesitamos añadir un componente? ¿Usaríamos la síntaxis de nombres mixtos o la nombres compuestos? Y si es compuesto, ¿qué síntaxis de nombre compuesto? Los desarrolladores que escriben aplicaciones como navegadores de espacios de nombres afrontan frecuentemente esta cuestión. Puede ser díficil responder sin mucho conocimiento sobre el contexto al que se unió el nombre y como fue resuelto.

Por ejemplo, supongamos que el nombe "cn=homedir,cn=Jon Ruiz,ou=People" está unido a un objeto en un sistema de nombres diferentes -- especificamente, un contexto de sistema de ficheros. Para añadir un componente de nombre de fichero, usamos la síntaxis de nombres mixtos. Esto es porque estámos atravesando desde un espacio de nombres LDAP a un espacio de nombres de fichero.

cn=homedir,cn=Jon Ruiz,ou=People/tutorial

Cuando ya hemos añadido otro componente de nombre de fichero al resultado, deberíamos usar la síntaxis de nombre de fichero. Por ejemplo, en Windows, añadir el componente "report.txt" resulta en el nombre.

cn=homedir,cn=Jon Ruiz,ou=People/tutorial\report.txt

Para añadir un componente LDAP al nombre "cn=Jon Ruiz, ou=People" usaríamos la síntaxis de nombre LDAP.

cn=homedir,cn=Jon Ruiz,ou=People

El los tres ejemplos, hemos usado una sintaxis de nombre diferente. Las reglas de cúando usar cada una de ellas se hacen dificiles de imaginar, así como de programar.

Para ayudar en esta tarea, el JNDI proporciona Context.composeName() para componer nombres dinámicamente dependiendo de los límites del espacio de nombres federado. Le damos a este método dos argumentos: el nombre que queremos añadir y el nombre de su contexto (en relación a uno de sus contextos ancestros). Se necesita suministrar este último porque, en general, un contexto no conoce su nombre, especialmente su nombre en relación a otro contexto a través del que podríamos haber resuelto para obtenerlo.

La implementación de este método está suministrada por el proveedor de servicios. Esto pone la pelota de imaginarse los límites del espacio de nombres y de que síntaxis usar en el tejado del proveedor de servicios y no en el del desarrollador de la aplicación.

Aquí tenemos un ejemplo que realiza las composiciones descritas aquí.

// Create the initial context
Context ctx = new InitialContext(env);

// Compose a name within the LDAP namespace
Context ldapCtx = (Context)ctx.lookup("cn=Jon Ruiz,ou=people");
String ldapName = ldapCtx.composeName("cn=homedir", "cn=Jon Ruiz,ou=people");
System.out.println(ldapName);

// Compose a name when it crosses into the next naming system
Context homedirCtx = (Context)ctx.lookup(ldapName);
String compositeName = homedirCtx.composeName("tutorial", ldapName);
System.out.println(compositeName);

// Compose a name within the File namespace
Context fileCtx = (Context)ctx.lookup(compositeName);
String fileName = fileCtx.composeName("report.txt", compositeName);
System.out.println(fileName);

Los nombres de las variable usadas aquí son sólo para propósitos ilustrativos. La aplicación no necesita conocer si está interactuando con un contexto LDAP, un contexto del sistema de ficheros, o con un contexto que conecta los dos.

Nota:

La versión Beta v1.2 del proveedor de servicios del sistema de ficheros no implementa apropiadamente composeName(). Si ejecutamos este ejemplo en la plataforma Windows, la última composición usa un caracter de barra inclinada ("/") en lugar de la barra inclinada invertida.

Este método también tiene una forma sobrecargada que acepta argumentos Name en lugar de java.lang.String. Si estamos usando la forma Name, debemos asegurarnos de que los dos argumentos son del mismo tipo. Por ejemplo, no mezclar un CompositeName con un CompoundName.


Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis