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:


Controles de Peticiones de Conexión

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

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