|
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.