Sistema de Nombrado en Java (JNDI) y II

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);
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR