Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Filtros de Búsqueda

Además de especificar una búsqueda usando un grupo de atributos, podemos especificarla en la forma de un filtro de búsqueda. Un filtro de búsqueda es una consulta expresada en la forma de una expresión lógica. La síntaxis de todos los filtros aceptados por DirContext.search() se describe en la RFC 2254.

El siguiente filtro de búsqueda especifica que las entradas cualificadas deben tener un atributo "sn" con un valor de "Geisel" y un atributo "mail" con cualquier valor.

(&(sn=Geisel)(mail=*))

El siguiente código crea un filtro y los controles de búsqueda por defecto SearchControls, y los usa para realizar la búsqueda. La búsqueda es equivalente a la presentada en el ejemplo de la página anterior.

// Create the default search controls
SearchControls ctls = new SearchControls();

// Specify the search filter to match
// Ask for objects that have the attribute "sn" == "Giesel"
// and the "mail" attribute
String filter = "(&(sn=Geisel)(mail=*))";

// Search for objects using the filter
NamingEnumeration answer = ctx.search("ou=People", filter, ctls);

Ejecutar este ejemplo produce esta salida.

# java SearchWithFilterRetAll
>>>cn=Ted Geisel
attribute: sn
value: Geisel
attribute: objectclass
value: top
value: person
value: organizationalPerson
value: inetOrgPerson
attribute: jpegphoto
value: [B@1dacd75e
attribute: mail
value: Ted.Geisel@JNDITutorial.com
attribute: facsimiletelephonenumber
value: +1 408 555 2329
attribute: cn
value: Ted Geisel
attribute: telephonenumber
value: +1 408 555 5252

Rápida Visión de la Síntaxis de los Filtros de Búsqueda

La síntaxis del filtro de búsqueda es básicamente una expresión lógica en notación de prefijo, (es decir, los operadores lógicos aparecen antes de los argumentos). La siguiente tabla lista los símbolos usados para crear filtros.

Símbolo Descripción
& conjunción (es decir, and -- todos los de la lista deben ser ciertos)
| disjunción (es decir, or --una o más alternativas deben ser ciertas)
! negación (es decir, not -- el ítem que está siendo negado no debe ser cierto)
= igualdad (de acuerdo a la regla de correspondencia del atributo)
~= aproximadamente igual (de acuerdo a la regla de correspondencia del atributo)
>= mayor que (de acuerdo a la regla de correspondencia del atributo)
<= menor que (de acuerdo a la regla de correspondencia del atributo)
=* presencia (es decir, la entrada debe tener el atributo, pero su valor es irrelevante)
* comodín (indica cero o más caracteres que pueden ocurrir en esa posición), se utiliza cuando se especifican atributos para su correspondencia
\ escape (para escapar '*', '(', or ')' cuando ocurren dentro del valor del un atributo)

Cada ítem del filtro está compuesto usando un identificador de atributo y un valor de atributo o símbolos que denotan el valor del atributo. Por ejemplo, el ítem "sn=Geisel" significa que el atributo "sn" debe tener el valor de atributo "Geisel" y el ítem "mail=*" indica que el aributo "mail" sólo debe estar presente.

Cada ítem debe estar encerrado entre paréntesis, como en "(sn=Geisel)".

Estos ítems se componen usando operadores lógicos como "&" (conjunción) para crear operaciones lógicas, como en "(& (sn=Geisel) (mail=*))".

Cada expresión lógica puede estar compuesta por otros ítems que a su vez pueden ser otras expresiones lógicas, como en "(| (& (sn=Geisel) (mail=*)) (sn=L*))". Este último ejemplo solicita las entradas que tiene el atributo "sn" de "Geisel" y el atributo "mail" o cuya entrada "sn" empieza con la letra "L."

Para una completa descripción de la síntaxis puedes ver la RFC 2254.

Devolver los Atributos Seleccionados

El ejemplo anterior devolvía todos los atributos asociados con las entradas que cumplían con el filtro especificado. Podemos seleccionar los atributos a devolver seleccionando los argumentos de control de búsqueda. Podemos crear un array de identificadores de atributos que queremos incluir en el resultado y pasarlo a SearchControls.setReturningAttributes().

(Los controles de búsqueda se describen en la siguiente sección.) Aquí tenemos un ejemplo.

// Specify the ids of the attributes to return
String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);

Este ejemplo es equivalente al ejemplo Devolver Atributos Seleccionados de la página anterior. Al ejecutar el ejemplo se produce la siguiente salida. (La entrada no tiene un atributo "golfhandicap", por eso no se devuelve).

# java SearchWithFilter
>>>cn=Ted Geisel
attribute: sn
value: Geisel
attribute: mail
value: Ted.Geisel@JNDITutorial.com
attribute: telephonenumber
value: +1 408 555 5252

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