Sistema de Nombrado en Java (JNDI) y II

Prerequisito:

Deber�as estar familiarizado con las remisiones antes de leer esta p�gina. Las remisiones se cubrieron en la lecci�n Remisiones.

Un proveerdor de servicio normalmente s�lo soporta remisiones cuando un servicio de nombres/directorio proporciona dicha caracter�stica. S�lo el LDAP y servicios similares soportan remisiones.

C�mo se soportan las remisiones es parte integral de la implementaci�n del proveedor de servicio. Transciende cada aspecto de c�mo se procesan las respuestas del proveedor de servicio LDAP. Esta secci�n s�lo toca unos pocos t�picos relacionados con la implementaci�n de remisiones.

.�ReferralException

Una remisi�n est� representada por la clase abstracta ReferralException o su subclase LdapReferralException. Esta �ltima debe usarse para proveedores de servicio que soporten controles LDAP.

Proporcionar una implementaci�n concreta para esta clase es la clave para proporcionar soporte de remisiones. La principal tarea de la implementaci�n es devolver un contexto de remisi�n para getReferralContext(). Este m�todo tiene un par de sobrecargas, incluyendo una declarada en LdapReferralException. Es responsable de la generaci�n de un ejemplar Context que representa la localizaci�n identificada por la remisi�n. Una remisi�n est� definida como una URL en el LDAP. Una forma de crear el contexto de remisi�n es usar el soporte JNDI para URLs, por ejemplo creando una Reference usando la URL y luego usando NamingManager.getObjectInstance() para obtener el contexto.

Una vez que el programa de usuario tiene un contexto de remisi�n, se supone que llama sobre el contexto al m�todo original que caus� que se lanzara la ReferralException usando los argumentos originales. Algunos de los argumentos originales podr�an estar afectados por los contenidos de la remisi�n, incluyendo el nombre, el �mbito de b�squeda, el filtro de b�squeda, y los atributos de retorno. (Puedes ver m�s detalles en la draft-ietf-ldapext-namedref-00.txt.) Nuestra implementaci�n del contexto de remisi�n es responsable de modificar y/o reemplazar los argumentos suministrados con los de la remisi�n. Aqu� tenemos un ejemplo de como podr�a implementarse el m�todo bind() en el contexto de remisi�n:

public void bind(Name name, Object obj) throws NamingException {
    // This referral has been skipped; throw a ReferralException
    if (skipThisReferral) {
	throw new ReferralExceptionImpl(untriedReferrals);
    }

    // Override the name from the referral URL if appropriate
    Name nm = (urlName == null ? name : urlName);

    // Invoke the method on the real referral context
    refCtx.bind(nm, obj);
}

.�Saltar Remisiones

Una s�la entrada de remisi�n LDAP podr�a contener varias alternativas remisiones URLs pero todas equivalentes. Realmente una ReferralException representa una s�la remisi�n URL. Como resultado, el programa de usuario puede elegir entre las alternativas usando skipReferral(). La implementaci�n de ReferralException debe tener esto en cuenta y generar posiblemente m�ltiples ReferralExceptions desde una s�la entrada de remisi�n LDAP. Despu�s de que el programa de usuario llame a skipReferral(), debe llamar a getReferralContext() para obtener un contexto v�lido. El �nico prop�sito de ese contexto es proporcionar un contexto cuyos m�todos simplemente lancen una ReferralException para la siguiente remisi�n URL de la lista de alternativas.

Observa que si el programa de usuario sigue satisfactoriamene una alternaiva, deben descartarse todas las otras alternativas no probadas.

.�Modos de Remisi�n

Un programa JNDI determina c�mo quiere manejar las remisiones usando la propiedad de entorno Context.REFERRAL ("java.naming.referral"). De esta forma, el programa usuario puede especificar si quiere que las remisones se siguen autom�tica o manualmente o que sean ignoradas. Como desarrolladores de proveedores de servicio debemos manejar estos tres casos.

Cuando las remisiones se siguen autom�ticamente, deber�amos poner un mecanismo para limitar el n�mero de remisiones seguidas y as� evitar que se siguan las remisiones indefinidamente debido a fallos en la configuraci�n de los servidores. Esto puede hacerse, por ejemplo, manteniendo un contador con las ReferralException y con los contextos de remisi�n y actualiz�ndolo cada vez que se procesa una de las excepciones.

Cuando se siguen las remisiones manualmente, debemos hacer un seguimiento para saber cual es la remisi�n "actual", como se explic� en la secci�n anterior.

Actualmene las remisiones LDAP est�n especificadas por el borrador draft-ietf-ldapext-namedref-00.txt. No todos los servidores soportan este borrador. Nuestro proveedor de servicio LDAP debe decidir c�mo soportar las remisiones. Si usa este borrador, podr�a no ser totalmente interoperable con servidores que no lo hacen. Esto podr�a hacer que los servidores siempre devuelvan remisiones en respuestas LDAP sin importar qu� proveedor lo haga. Una forma de manejar este error es que nuestro proveedor lance una PartialResultException para indicar que podr�a haber m�s resultados que aquellos que se han devuelto.

COMPARTE ESTE ARTÍCULO

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