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:


Añadir Soporte de Enlaces a Referencias

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.


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