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:


Operaciones Extendidas

Como se mencionó anteriormente en esta lección, el LDAP dfine una operación "extendida", que toma una petición como argumento y devuelve una respuesta. La petición contine un identificador que identifica la propia petición y sus argumentos. La respuesta contiene los resultados de realizar la petición. La pareja de operaciónes petición/respuesta "extendidas" se llama una extensión. Por ejemplo, puede haber una extensión para "Start TLS", que es una petición del cliente para que el servidor active el protocolo TLS. Estas extensiones pueden ser estándars (defindias por la comunidad LDAP) o propietarias (definidas por un vendedor de directorios particular).

El paquete javax.naming.ldap define el interface ExtendedRequest para representar el argumento de una operación "extendida", y el interfae ExtendedResponse para representar el resultado de una operación. Una respuesta extendida normalmente está emparejada con una petición extendida pero no cesariamente al revés. Es decir, podemos tener peticiones extendidas que no tengan su correspondiente respuesta extendida. Una respuesta extendida sin pareja se llama una notificación no solicitada, descrita con detalle en la lección Notificación de Eventos.

Una aplicación no trata normalmente con estos interfaces. En su lugar, trata con clases que los implementan. La aplicación obtiene las clases como parte de un repertorio de operaciones "extendidas" estandarizadas a través del IETF o desde vendedores de directorios para operaciones "extendidas" específicas de un vendedor. Las clases petición deberían tener constructores que acepten argumentos de una forma segura y amigable para el usuario, mientras que las clases respuesta deberían tener métodos de acceso para obtener los datos de la respuesta de una forma segura y agradable. Internamete, las clases petición/respuesta tratan con valores BER codificados/decodificados.

Extensiones por Servidores LADP

El soporte para extensiones específicas depende del servidor LDAP.

Aquí tenemos un sencillo programa para buscar la lista de extensiones que soporta un servidor LDAP:

// Create the initial context
DirContext ctx = new InitialDirContext();

// Read supportedextension from the root DSE
Attributes attrs = ctx.getAttributes(
    "ldap://localhost:389", new String[]{"supportedextension"});

Aquí tenemos la salida producida por este programa cuando se ejecuta en un servidor LDAP:

{supportedextension=supportedextension.
  1.3.6.1.4.1.1466.20037
}

Implementaciones

Normalmente trataremos con clases de implementación que implementen ExtendedRequest y ExtendedResponse en vez de tratar directamente con sus métodos. Dichas clases de implementación normalmente tienen constructores amigables y métodos accesores.

Por ejemplo, supongamos que un servidor LDAP soporta una operación "extendida" Get Time. Suministraría clases como GetTimeRequest y GetTimeResponse, para que las aplicaciones puedan usar esta caracterísitca. Una aplicación usaría estas clases de esta forma:

// Invoke the "extended" operation
GetTimeResponse resp =
    (GetTimeResponse) lctx.extendedOperation(new GetTimeRequest());

// Get the "extended" operation's (decoded) response
long time = resp.getTime();

Las clases GetTimeRequest y GetTimeResponse podrían estar definidas de esta forma:

public class GetTimeRequest implements ExtendedRequest {
    // User-friendly constructor 
    public GetTimeRequest() {
    };

    // Methods used by service providers
    public String getID() {
        return GETTIME_REQ_OID;
    }
    public byte[] getEncodedValue() {
        return null;  // No value is needed for the Get Time request
    }
    public ExtendedResponse createExtendedResponse(
        String id, byte[] berValue, int offset, int length) throws NamingException {
        return new GetTimeResponse(id, berValue, offset, length);
    }
}

public class GetTimeResponse implements ExtendedResponse {
    long time;
    // Called by GetTimeRequest.createExtendedResponse()
    GetTimeResponse(String id, byte[] berValue, int offset, int length) 
        throws NamingException {
        // Check the validity of the id
        long time =  ... // Decode berValue to get the time
    }

    // These are type-safe and user-friendly methods
    public java.util.Date getDate() { return new java.util.Date(time); }
    public long getTime() { return time; }

    // These are low-level methods
    public byte[] getEncodedValue() {
        return // berValue saved;
    }
    public String getID() {
        return GETTIME_RESP_OID;
    }
}

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