Sistema de Nombrado en Java (JNDI) y II

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: [email protected], 
 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.

COMPARTE ESTE ARTÍCULO

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