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);
}