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:


Crear y Actualizar Remisiones

Nota:

La siguiente explicación asume que el servidor LDAP soporta remisiones según se describe en la draft-ietf-ldapext-namedref-00.txt. Si el servidor no soporta las remisiones de esta forma, los ejemplos de esta sección no funcionarán.

Representación en el Directorio

Una remisión se representa en un directorio LDAP como un objeto de la clase "referral". Contiene un atributo "ref", que puede tener una o más URLs. Cada URL representa alternativas equivalentes para seguir la remisión. Puedes ver el esquema de definición de la clase "referral" y del atributo "ref" en la draft-ietf-ldapext-namedref-00.txt.

Desactivar el Seguimiento de Remisiones

Debemos asegurarnos de que el servidor LDAP devolverá las entradas de remisión como entradas LDAP normales. Podemos hacer esto configurando la propiedad de entorno Context.REFERRAL como "ignore" o des-seleccionándola. "ignore" es el valor por defecto si la propiedad no está configurada. Esto es necesario si estamos actualizando o eliminado remisiones y es opcional si las estamos creando. Sin embargo, es una buena práctica hacerlo para que todos los programas que manejan remisiones sean consistentes.

Crear una Remisión

Creamos una entrada de remisión como lo haríamos con cualquier otro tipo de entrada, usando DirContext.bind() o DirContext.createSubcontext() y suministrando los atributos apropiados. La entrada de remisión debe tener como una de sus clases la clase "referral", y debe tener un atributo "ref" que al menos tenga un string URL.

Aquí tenemos un ejemplo que crea una remisión llamada "cn=NewReferral" que apunta a la entrada "cn=J. Duke, ou=NewHires, o=JNDITutorial" en otro servidor:

// The object classes
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("referral");
objclass.add("extensibleObject"); // So that you can use cn as name

// The referral itself
Attribute ref = new BasicAttribute("ref",
    "ldap://localhost:389/cn=J. Duke, ou=NewHires, o=JNDITutorial");

// The name
Attribute cn = new BasicAttribute("cn", "NewReferral");

// Create the attributes to be associated with the new context
Attributes attrs = new BasicAttributes(true); // Case-ignore
attrs.put(objclass);
attrs.put(ref);
attrs.put(cn);

// Create the context
Context result = ctx.createSubcontext("cn=NewReferral", attrs);

Podemos usar el program de ejemplo CheckReferral.java para examinar los atributos de la entrada de remisión. Si lo ejecutamos sin argumentos de la línea de comandos, muestra la propia remisión. Si lo ejecutamos con un argumento, muestra los atributos de la entrada de remisión:

# java CheckReferral
ref: ldap://localhost:389/cn=J. Duke, ou=NewHires, o=JNDITutorial 
objectclass: top, referral, extensibleObject 
cn: NewReferral

# java CheckReferral follow
sn: Duke 
objectclass: top, person, organizationalPerson, inetOrgPerson
mail: newbie@JNDITutorial.com 
cn: J. Duke

Actualizar una Remisión

Podemos actualizar una entrada de remisión como cualquier otro tipo de entrada, usando DirContext.modifyAttributes(). Aquí tenemos un ejemplo que modifica la URL de la remisión a "ldap://localhost:389/cn=C. User, ou=NewHires, o=JNDITutorial":

// Set up new referral attribute
Attributes attrs = new BasicAttributes("ref",
    "ldap://localhost:389/cn=C. User, ou=NewHires, o=JNDITutorial", 
    true); // Case-ignore

// Update the "ref" attribute
ctx.modifyAttributes(
    "cn=NewReferral", DirContext.REPLACE_ATTRIBUTE, attrs);

Después de ejecutar este programa, si volvemos a examinar la entrada usando CheckReferral, veremos esta salida:

# java CheckReferral
ref: ldap://localhost:389/cn=C. User, ou=NewHires, o=JNDITutorial 
objectclass: top, referral, extensibleObject 
cn: NewReferral

# java CheckReferral follow
sn: User 
objectclass: top, person, organizationalPerson, inetOrgPerson 
mail: cuser@JNDITutorial.com 
userpassword: [B@1dacd887 
cn: C. User

Borrar una Remisión

Podemos borrar una entrada de remisión como lo haríamos con cualquier otro tipo de entrada, usando Context.unbind() o Context.destroySubcontext(). Aquí tenemos un ejemplo que elimina la entrada de remisión "cn=NewReferral":

// Remove the entry
ctx.destroySubcontext("cn=NewReferral");

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