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:


Métodos de Actualización

Un contexto se actualiza usando las siguientes operaciones:

Si estos métodos son soportados y cómo depende del servicio de nombres/directorio subyacente. Una implementación de contexto real actualizaría el servicio de nombres/directorio subyacente. Una implementación de contexto para un servicio de sólo lectura, por ejemplo, no soportaría ninguno de estos métodos. Una para un espacio de nombres plano, como el ejemplo del espacio de nombres plano no soportaría createSubcontext() ni destroySubcontext().

Truco de Implementación:

bind() y rebind() pueden aceptar null como el parámetro objeto si la implementación de contexto sólo acepta añadir un nombre a un espacio de nombres sin un objeto asociado.

En el ejemplo del espacio de nombres plano, bind(), rebind(), y unbind() están implementadas casi como lookup(), excepto en que actualizan la estructura de datos interna en lugar de leer de ella. Aquí tenemos la definición de rebind():

public void rebind(Name name, Object obj) throws NamingException {
    if (name.isEmpty()) {
        throw new InvalidNameException("Cannot bind empty name");
    }

    // Extract the components that belong to this namespace
    String nm = getMyComponents(name);

    // Add the object to the internal hash table
    bindings.put(nm, obj);
}

Renombrar

rename() nos permite renombrar entre diferentes contextos. Una implementación real podría tener problemas al soportar esto totalmente porque el servicio de nombres/directorio subyacente podría no sopotarla. Algunos servicios podría soportar sólo el renombrado dentro del mismo contexto. En este caso, el propio servicio podría indicar un error y resultaría en una excepción específica del servicio; o, la implementación de contexto podría detectar el problema y lanzar una OperationNotSupportedException.

Aquí tenemos la definición de rename() para el ejemplo del espacio de nombres plano:

public void rename(Name oldname, Name newname) throws NamingException {
    if (oldname.isEmpty() || newname.isEmpty()) {
        throw new InvalidNameException("Cannot rename empty name");
    }

    // Extract the components that belong to this namespace
    String oldnm = getMyComponents(oldname);
    String newnm = getMyComponents(newname);

    // Check whether the new name exists
    if (bindings.get(newnm) != null) {
        throw new NameAlreadyBoundException(newname.toString() +
                                            " is already bound");
    }

    // Check whether the old name is bound
    Object oldBinding = bindings.remove(oldnm);
    if (oldBinding == null) {
        throw new NameNotFoundException(oldname.toString() + " not bound");
    }

    bindings.put(newnm, oldBinding);
}

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