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

Sistema de Nombrado en Java (JNDI) y II
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Analizador de Nombres

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.


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