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:


URLs LDAP

La RFC 2255 describe el formato de la síntaxis para URLs LDAP v3. El formato contiene todos los elementos necesarios para especificar una operación de búsqueda LDAP, con previsiones para soportar futuras extensiones de la versión 3.

ldap://host:port/dn?attributes?scope?filter?extensions

La información de autentificación podría ser especificada en la porción extensions de la URL. Puedes ver en la RFC una descripción completa del formato.

Las URLs juegan un papel en varios lugares del JNDI. Esta sección describe cómo se pueden usar las URLs LDAP con proveedores de servicio LDAP.

URL como un Nombre para el Contexto Inicial

Si pasamos una URL LDAP a los métodos de InitialContext o de InitialDirContext, entonces el JNDI buscará una implementación de contexto (llamada una implementación de contexto URL) para procesar la URL LDAP.

Aquí tenemos un ejemplo que realiza una búsqueda desde el contexto inicial usando una URL LDAP como el argumento nombre:

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

// Perform the search by using the URL
NamingEnumeration answer = ctx.search(
     "ldap://localhost:389/ou=People,o=JNDITutorial", "(sn=Geisel)", null);

Este ejemplo produce esta salida:

>>>cn=Ted Geisel
{sn=sn: Geisel, 
 objectclass=objectclass: top, person, organizationalPerson, inetOrgPerson, 
 jpegphoto=jpegphoto: [B@1dacd78a, 
 mail=mail: Ted.Geisel@JNDITutorial.com, 
 facsimiletelephonenumber=facsimiletelephonenumber: +1 408 555 2329, 
 telephonenumber=telephonenumber: +1 408 555 5252, 
 cn=cn: Ted Geisel}

Podríamos haber observado que no hemos necesitado configurar ninguna variable de entorno para realizar esta búsqueda. Esto es porque el JNDI busca automáticamente la implementación de contexto URL. Si no encuentra esta URL, usará sólo la implemetación especificada por las variables de entorno (si existen). Para una URL LDAP, busca una clase con el nombre ldapURLContextFactory en las localizaciones de paquetes especificadas por la propiedad de entorno Context.URL_PKG_PREFIXES ("java.naming.factory.url.pkgs"). Esta propiedad contiene una lista de prefijos de paquetes separados por caracteres de dos puntos (":"). Si en estos paquetes no se encuentra una clase con el nombre correcto, entonces se busca el paquete com.sun.jndi.url.ldap.

Componentes de Consulta en una URL

Con la excepción de los métodos DirContext.search(), cuando se pasa una URL LDAP como un nombre al contexto inicial, la URL no debe contener ningún caracter de componentes de consulta ('?'). Si lo hace, el proveedor de servicio lanzará una InvalidNameException.

Para los métodos search(), si una URL contiene componentes de consulta, entonces todos los demás argumentos (incluyendo el filtro y los SearchControls) son ignorados. Se usarán en su lugar los componentes de consulta de la URL y sus valores por defecto. Por ejemplo, si se suministra una URL LDAP conteniendo un componente de ámbito, este ámbito sobreescribirá cualquier selección de ámbito que se pase en un argumento. Si la URL contiene componentes de consulta pero no de ámbito, entonces se usa el ámbito por defecto de la URL LDAP ("objeto base").

Aquí tenemos un ejemplo que realiza una búsqueda de un subárbol usando un filtro para "(sn=Geisel)".

// Perform the search by using URL
NamingEnumeration answer = ctx.search(
	"ldap://localhost:389/ou=People,o=JNDITutorial??sub?(sn=Geisel)",
	"" /* ignored*/, 
        null /* ignored */);
Nota:

La versión 1.2 del proveedor LDAP de Sun no trata los componentes de consulta apropiadamente.

URL para Configurar Proveedores de Servicio

Para configurar un proveedor de servicio LDAP, normalmente suministramos una URL LDAP en la propiedad de entorno Context.PROVIDER_URL ("java.naming.provider.url"). El proveedor de servicio LDAP usa esta URL para configurar su conexión con el servidor de directorio. Sólo las partes host, puerto, y dn de la URL son importantes para esta configuración. Suministrar otras partes de la URL resultará en una ConfigurationException.

URL para Especificar Remisiones

Una remisión LDAP contiene una lista de una o más URLs. Para procesar una remisión LDAP, el proveedor de servicio usa la información de estas URLs para crear conexiones a servidores LDAP a los que se refieren. Varias URLs LDAP en una sóla remisión son tratadas como alternativas, se siguen una por una hasta que una tenga éxito. Se usa la URL completa (incluyendo los componentes de consulta).

Configuramos las remisiones creando entradas referral en el directorio que contiene el atributo "REF". Este atributo contiene una o más URLs de remisión (normalmente URLs LDAP). Puedes ver más detalles en la lección Remisiones.

URL como un Nombre en NamingEnumeration

Cuando realizamos una Context.list(), Context.listBindings(), o DirContext.search(), obtendremos una NamingEnumeration. Cada ítem de esa enumeración es un ejemplar o una subclase de NameClassPair. Cuando el nombre del ítem (NameClassPair.getName()) no es relativo al contexto fuente, se devuelve como una URL. Podemos usar NameClassPair.isRelative() para chequear si el nombre es relativo. Una de las razones principales porque el nombre podría no ser relativo es porque se siguió una remisión, en cuyo caso, el nombre del objeto es el del espacio de nombres referenciado y no el de donde se inició la operación. Puedes ver más detalles en la lección URLs.

URL como un Argumento para getObjectInstance()

Cuando un espacio de nombres LDAP s federa bajo otro espacio de nombres (como un DNS), la información que se almacena en espacio de nombres superior podría ser una URL LDAP. En dicho escenario, una llamada a método lookup()/list()/search() en el espacio de nombres superior devolverá una Reference que contiene la URL LDAP para el espacio de nombres LDAP. El proveedor de servicio para el espacio de nombres superior pasará entonces la Reference a NamingManager.getObjectInstance() o a DirectoryManager.getObjectInstance() para crear un ejemplar de un contexto LDAP.


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