Si una implementaci�n de contexto soporta un espacio de nombres plano o en forma de �rbol depende del servicio de nombres/directorio subyacente. Por ejemplo, una implementaci�n de contexto para un servicio de directorio LDAP debe soportar un espacio de nombres en forma de �rbol, mientras que una implemetnaci�n de un registro RMI debe soportar un espacio de nombres plano porque el servicio subyacente as� lo dicta.
Una implementaci�n de contexto para un espacio de nombres plano o en forma de �rbol necesita un analizador de nombres, es una clase que implementa el interface NameParser. El JNDI proporciona una clase de utilidad, CompoundName, para que la usen los desarrolladores cuando implementen NameParser. Sin embargo, no est�mos obligados a usar un CompoundName. Podemos implementar NameParser de forma que su m�todo parse() devuelva un objeto que implemente el interface Name. Deber�amos evitar el uso de la clase CompositeName para este prop�sito porque podr�a ser interpretado como un nombre mixto.
El ejemplo del espacio de nombres en forma de �rbol implementa nombres con s�ntaxis de derecha-a-izquierda con un caracter separador ("."). Aqu� est� la implemetnaci�n del interface NameParser:
class HierParser implements NameParser {
private static final Properties syntax = new Properties();
static {
syntax.put("jndi.syntax.direction", "right_to_left");
syntax.put("jndi.syntax.separator", ".");
syntax.put("jndi.syntax.ignorecase", "false");
syntax.put("jndi.syntax.escape", "\\");
syntax.put("jndi.syntax.beginquote", "'");
}
public Name parse(String name) throws NamingException {
return new CompoundName(name, syntax);
}
}
La clase CompoundName espec�fica propiedades que se usan para definir una s�ntaxis de nombrado. Por ejemplo, podemos especificar una s�ntaxis de separador de componente at�mico, su escape y los caracteres de comillado, y si el componente es analizado de derecha a izquierda o de izquierda a derecha o es plano. La s�ntaxis del espacio de nombres la determina el servicio de nombres/directorio subyacente. Podemos usar CompoundName s�lo si la s�ntaxis del servicio subyacente entra dentro del modelo de s�ntaxis de CompoundName.
El usuario del API usa Context.getNameParser() para obtener un analizador de nombres del ejemplar Context La implementaci�n de ejemplo primero realiza una lookup() para verificar que el nombre de entrada es v�lido. Luego devuelve el campo constante myParser.
public NameParser getNameParser(Name name) throws NamingException {
// Do lookup to verify that the name exists
Object obj = lookup(name);
if (obj instanceof Context) {
((Context)obj).close();
}
return myParser;
}
Cada implementaci�n de contexto tiene s�lo un ejemplar de HierParser.
protected final static NameParser myParser = new HierParser();
Esto se hace as� para satisfacer la especificaci�n JNDI, que requiere que una implementaci�n de contexto devuelva un NameParser cuyo m�todo equals() devuelva true para todos los ejemplares de Context del mismo espacio de nombres. Este requerimiento es �til para soportar federaciones. Incluso aunque este ejemplo no soporta federaci�n, el requerimiento es f�cilmente conseguible.