Sistema de Nombrado en Java (JNDI) y II

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

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR