Sistema de Nombrado en Java (JNDI) y II

El interface DirContext contiene los siguientes m�todos (adem�s de sus sobrecargas java.lang.String) para buscar en un directorio:

Como desarrolladores de una implementaci�n de contexto, necesitamos preocuparnos s�lo de dos de ellos. Esto es as� porque los otros dos normalmente se pueden escribir en t�rminos de los primeros.

La forma que acepta un nombre y un conjunto de atributos a buscar puede implementarse usando la forma que acepta el par�metro retIDs adicional, de esta forma:

public NamingEnumeration search(Name name, Attributes matchingAttrs) 
    throws NamingException {
        return search(name, matchingAttrs, null);
}

Un valor null en el par�metro retIDs significa devolver todos los atributos.

La forma que acepta una expresi�n de filtro y un Object[] puede implementarse convirtiendo los par�metros filterExpr y filterArgs en un filtro de string, de esta forma:

public NamingEnumeration search(Name name,
    String filterExpr, Object[] filterArgs, SearchControls cons)
    throws NamingException {
    // Fill in the expression
    String filter = format(filterExpr, filterArgs);
	    
    return search(name, filter, cons);
}

format() es un m�todo de utilidad que devuelve un filtro de string que cumple la RFC 2254.

Entonces s�lo nos queda que implementar dos m�todos:

  • La b�squeda b�sica que acepta un conjunto de atributos y un la lista de ID de atributos a devolver.
  • La b�squeda avanzada que acepta un filtro de string y un par�metro SearchControls

Nuestra implementaci�n puede soportar los dos, ninguno o s�lo uno de estos m�todos. Normalmente, una implementaci�n que soporta la b�squeda avanzada tambi�n soporta la b�squeda b�sica. La b�squeda b�sica puede implementarse en t�rminos de la b�squeda avanzada convirtiendo los atributos a buscar en un filtro de string.

Te�ricamente, cualquier implementaci�n de contexto puede soportar �mbos m�todos de b�squeda, sin importar las capacidad del servicio de directorio subyacente. Una implementaci�n de contexto para un servicio de directorio que no soporte ning�n servicio de b�squeda puede implementar estos m�todos para leer datos del directorio y realizar las b�squedas en la propia implementaci�n de contexto. De forma similar, una implementaci�n de contexto para un servicio de directorio que s�lo tenga unas capacidades de b�squeda limitadas puede implementar busquedas m�s complicadas usando las capacidades del directorio limitado. Una implementaci�n de contexto para un servicio de directorio LDAP no necesita hacer mucho trabajo, ya que el LDAP est� lleno de capacidades de b�squeda. Para directorios con capacidades de b�squeda limtiadas, necesitamos evaluar si es efectivo proporcionar todas las capacidades de b�squeda a pesar de la posibilidad de empeorar el rendimiento de una red cargada.

Si nuestra implementaci�n no soporta uno de estos m�todos, el m�todo no soportado deber�a lanzar una OperationNotSupportedException.

.�La B�squeda B�sica

La b�squeda b�sica implica buscar en un contexto nombrado una entrada que contengan los atributos a buscar. El m�todo devuelve una NamingEnumeration; cada �tem de la enumeraci�n es un SearchResult. Cada SearchResult consiste en un nombre de entrada relativo al contexto nombrado y los atributos de la entrada seleccionda usando el par�metro retIDs. Como la b�squeda s�lo implica al contexto nombrado, normalmente el nombre es at�mico, a menos que se haya seguido un alias o una remisi�n.

El usuario del API llama a NamingEnumeration.close(), la implementaci�n de contexto deber�a liberar los recursos asociados con la b�squeda.

.�La B�squeda Avanzada

La complejidad de implementar la b�squeda avanzada tiene dos dimensiones. Una dimensi�n es la habilidad de procesar filtros de b�squeda que son arbitrariamente complejos. La otra es la habilidad de satisfacer las restricciones especificadas en el par�metro SearchControls. Por ejemplo, un usuario del API puede especificar una b�squeda de sub-�rbol mediante este par�metro. La b�squeda avanzada se mapea f�cilmente en directorios que implementan los protocolos LDAP o X.500. Las implementaciones de contexto para otros protocolos podr�an necesitar un trabajo sustancial para poder soportar este m�todo.

Al igual que la b�squeda b�sica, la b�squeda avanzada devuelve una NamingEnumeration de SearchResults. Un SearchResult puede contener, adem�s del nombre y los atributos solicitados de la entrada, el objeto unido al nombre, proporcionado por el usuario del API mediante el par�metro SearchControls. M�s adelante en esta lecci�n podr�s ver una descripci�n de como hacer extensible una implementaci�n de contexto para los tipos de objetos que puede devolver en un SearchResult.

COMPARTE ESTE ARTÍCULO

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