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:


Búsquedas

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.


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