Nombres String contra Nombres Estructurados
Cada método de nombrado de los interfaces Context
y DirContext
tiene dos formas sobrecargadas, una que acepta un nombre string (java.lang.String)
y una que acepta un nombre estructurado (Name).
Por ejemplo, lookup() tiene estas dos formas.
lookup(java.lang.String)
lookup(javax.naming.Name)
Nombres String
Las sobrecargas que aceptan nombres java.lang.String son formas
de conveniencia que permiten a los métodos ser invocados sin que el llamador
tenga que construir un ejemplar de CompositeName.
El argumento java.lang.String pasado a estos métodos
sobrecargados representa un nombre
mixto y sigue las reglas de síntaxis especificadas en la clase CompositeName.
Por ejemplo, las dos siguientes llamadas a lookup() son
equivalentes.
Object obj1 = ctx.lookup("cn=Ted Geisel, ou=People, o=JNDITutorial");
CompositeName cname = new CompositeName(
"cn=Ted Geisel, ou=People, o=JNDITutorial");
Object obj2 = ctx.lookup(cname);
Nombres Estructurados
Las sobrecargas que aceptan un Name aceptan un ejemplar de CompositeName,
CompoundName,
o cualquier otra clase que implemente el interface Name.
Si el objeto es un ejemplar de CompositeName, es tratado como
un nombre mixto. Un nombre mixto es un nombre que puede expandirse a varios
sistemas de nombres, no sólo al sistema de nombres en que se ha llamado al
método. Puedes ver la sección Nombres Mixtos de
esta lección para ver ejemplos de cómo usarlos. En el peor de los casos, el
nombre solo se expande en el sisema de nombres en el que se llamó al método.
En la sección Trucos para
usuarios de LDAP, por ejemplo, todos los ejemplos usan nombres string desde
el espacio de
nombres LDAP. Observa que incluso en el peor de los casos, el nombre
todavía es un nombre mixto; es decir, un nombre mixto con un sólo componente.
Si el objeto no es un ejemplar de CompositeName, se le trata
como un nombre compuesto -- un nombre que expande sólo un espacio de nombres.
Puedes ver la sección Nombres Compuestos de esta
lección para ver ejemplos de uso de nombres compuestos.
Cuándo usar cada uno de ellos
Normalmente, nuestro programa usará un nombre string si el usuario suministró
un nombre string. Podría usar un ejemplar de Name si se hubiera
compuesto el nombre usando entrada del usuario. Por ejemplo en una aplicación
navegador, cuando el usuario atraviesa diferentes partes del espacio de nombres,
la aplicación podría necesitar componer nombres que directamente navegaran a
través de esas partes del espacio de nombres. Podría hacerlo creando
representaciones string de los nombres de aquellas partes del espacio de nombres
y siendo consciente y usando la síntaxis de nombres apropiada. O, podría usar
ejemplares de Name creados con la ayuda de las utilidades
proporcionadas por el JNDI.
Puedes ver la sección Manejar Caracteres Especiales
de esta lección para ver cómo acomodar los caracteres especiales en un nombre
que tiene conflictos con la síntaxis de nombres mixtos de JNDI.