Sistema de Nombrado en Java (JNDI) y II

Prerequisito:

Deber�as estar familiarizado con los enlaces de referencia antes de leer esta lecci�n. Los enlaces de referencia se explicar�n en la lecci�n Miscel�nea.

Normalmente un proveedor de servicio soporta enlaces de referencia si soporta b�squedas que pueden devolver enlaces de referencia. Sin embargo, como la mayor�a de los servicios de nombres/directorio tienen sus propias nociones de (nativos) enlaces simb�licos (como los alias o las remisiones), los enlaces de referencia podr�an estar soportados s�lo por proveedores de servicio que tambi�n soporten federaci�n.

Al igual que el soporte de remisiones, el soporte de enlaces de referencia es una parte integral de la implementaci�n del proveedor de servicio. Afecta a todas las operaciones que implican resoluci�n de nombres. Adem�s, los enlaces de referencia se pueden implementar de formas diferentes. Abajo hay algunos trucos que podemos seguir, pero la implementaci�n que funciona para nuestro proveedor de servicio depende de las caracter�sticas del servicio de nombes/directorio subyacente. En este respecto es especialmente importante c�mo hayamos implementado nuestro c�digo para manejar federaciones.

.�Desreferenciar un Enlace

Un enlace de referencia est� representado por la clase LinkRef. Aqu� tenemos un ejemplo de un m�todo para desreferenciar un LinkRef:

public static Object derefLink(LinkRef ref, Context currCtx,
    Hashtable env) throws NamingException {

    String link = ref.getLinkName();

    if (link.startsWith("./")) {
	// A relative link; assume that currCtx is the 
	// immediate context in which the link is bound
	return currCtx.lookup(link.substring(2));
    } else {
	// An absolute link; resolve it to the initial context
	Context ctx = new InitialContext(env);
	try {
	    return ctx.lookup(link);
	} finally {
	    ctx.close();  // Close when you're done
	}
    }
}

.�Cu�ndo Desreferenciar

lookupLink() no deber�a desreferenciar enlaces. Todas las otras resoluciones de nombres normales de todos los m�todos del interface Context y sus subinterfaces siempre siguen los enlaces.

.�Detectar Ciclos

La resoluci�n del propio nombre de enlace podr�a hacer que la resoluci�n pasara a trav�s de otros enlaces. El resultado podr�a ser un ciclo de enlaces cuya resoluci�n no puede terminar normalmente.

Son posibles varias aproximaciones para detectar y evitar los ciclos. Una es mantener un tama�o de pila fijo. En este caso, cada enlace seguido se pone en la pila con el correspondiente nombre restante. Cuando la pila est� llena, nuestro proveedor deber�a lanzar una LinkLoopException. La resoluci�n de un enlace procede resolviendo cada enlace de la pila. Cuando se completa la resoluci�n del enlace superior de la pila, es sacado de �sta y empieza la resoluci�n del siguiente enlace de la pila. Cuando la pila est� vac�a, se ha completado la resoluci�n del enlace original.

COMPARTE ESTE ARTÍCULO

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