Sistema de Nombrado en Java (JNDI) y II

Los controles de peticiones de conexi�n se usan siempre que se necesita establecer o re-establecer una conexi�n con el servidor LDAP. No afectan a otras operaciones LDAP no relacionadas con las conexiones, como "search" o "modify."

Inicializamos una control de petici�n de conexi�n de un contexto usando el constructor InitialLdapContext. Aqu� tenemos un ejemplo:

// Create the control to use when establishing connection
Control[] connCtls = new Control[]{new SampleRequestControl()};

// Create the initial context
LdapContext ctx = new InitialLdapContext(env, connCtls);

Este ejemplo crea un nuevo ejemplar de InitialLdapContext con controles de conexi�n inicializados como SampleRequestControl. Una vez configurados, los controles de conexi�n (SampleRequestControl) son heredados por todos los contextos derivados de este contexto. Observa que esto es distinto de los controles de peticiones de contexto que no son heredados.

.�Cambiar los Controles de Petici�n de Conexi�n

Podemos cambiar los controles de petici�n de conexi�n de un contexto usando LdapContext.reconnect(). Este m�todo establece una nueva conexi�n con el servidor LDAP usando los controles de petici�n suministrados como argumento. Si el argumento es null, no se env�a ning�n control de petici�n. Despu�s de que se haya establecido la conexi�n, cualquier reconexi�n impl�cita, por ejemplo aquellas que resultan de atualizaci�n de credenciales, tambi�n usar�n los mismos controles.

reconnect() afecta s�lo a la conexi�n que est� siendo usada por el ejemplar Context sobre el que se llam� a reconnect(). Cualquier nuevo ejemplar de Context que descienda del contexto hereda los nuevos controles de conexi�n, pero los contextos que anteriormente compart�an la conexi�n no se ver�n modificados. Es decir, los controles de peticiones de control deben modificarse expl�citamente y no se ven afectados por los cambios en otros controles de peticiones de con�xi�n de otro contexto.

En el siguiente ejemplo, se crea un InitialLdapContext con un SampleRequestControl. Los controles de peticiones de contexto se configuran como null mediante una llamada a reconnect(), con null como argumento.

// Create the control to use when establishing the connection
Control[] connCtls = new Control[]{new SampleRequestControl()};

// Create the initial context
LdapContext ctx = new InitialLdapContext(env, connCtls);

// Do something useful with ctx

// Reconnect by using no controls
ctx.reconnect(null);

.�Encontrar los Controles de Petici�n de Conexi�n que est�n Activos

Para encontrar los controles de petici�n de conexi�n que est�n activos para un contexto, usamos LdapContext.getConnectControls(). Aqu� tenemos un ejemplo que inicializa los controles de peticiones de conexi�n para ser SampleRequestControl y luego chequea los controles usando getConnectControls():

// Create the control to use when establishing the connection
Control[] connCtls = new Control[]{new SampleRequestControl()};

// Create the initial context
LdapContext ctx = new InitialLdapContext(env, connCtls);

// Check the controls in effect for connection establishment
Control[] reqCtls = ctx.getConnectControls();

Aqu� est� la salida producida por este ejemplo:

SampleRequestControl@1fa4d891
com.sun.jndi.ldap.ManageReferralControl@1fa4d59d

Esta salida muestra el control que se a�adi� (SampleRequestControl) y el control Manage Referral que el proveedor LDAP env�a cuando se ignoran las remisiones (es decir, se ha deseleccionado la propiedad de entorno Context.REFERRAL o se ha configurado como "ignore"). Para evitar que el proveedor LDAP env�e este control, debemos configurar la propiedad Context.REFERRAL como "throw" o como "follow". Puedes ver m�s detales en la lecci�n Remisiones.

.�Inicializar un Control de Petici�n de Conexi�n de un Contexto de Remisi�n

Las remisiones se explicaron en detalle en la lecci�n Referrals. Cuando seguimos remisiones autom�ticametne, el contexto remitido hereda tanto la conexi�n como los controles de petici�n de conexi�n del contexto original. Cuando manejamos las remisiones manualmente, tenemos la opci�n de �mbos controles para cada contexto remitido.

Aqu� tenemos un ejemplo. Los controles de petici�n de conexi�n del contexto remitido se configuran pasando los controles a LdapReferralException.getReferralContext(Hashtable, Control[]). Despu�s de que se haya creado el contexto remitido, se env�an los controles de petici�n de contexto mediante una llamada a LdapContext.setRequestControls():

...
} catch (LdapReferralException e) {
    Control[] connCtls = new Control[]{new SampleRequestControl()};
    Control[] ctxCtls = new Control[]{
	new SortControl(new String[]{"cn"}, Control.CRITICAL)
    };

    // Get the referral context by using connection controls
    // when establishing the connection by using the referral
    ctx = (LdapContext) e.getReferralContext(env, connCtls);

    // Set the context request controls for the referral context
    ctx.setRequestControls(ctxCtls);
}

COMPARTE ESTE ARTÍCULO

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