|
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: [email protected] 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: [email protected] 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");