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:


Tamaño del Batch

Cuando llamados a list(), listBindings(), o a cualquiera de los métodos search(), el proveedor de servicio LDAP interactúa con el servidor LDAP para recuperar los resultados y devolverlos en la forma de una NamingEnumeration. El proveedor de servicios LDAP puede recolectar todos los resultados antes de devolver la NamingEnumeration, o puede devolver cada resultado según el llamador invoque a NamingEnumeration.next() o a NamingEnumeration.nextElement(). Podemos controlar el comportamiento del proveedor de servicio LDAP en este aspecto usando la propiedad de entorno Context.BATCHSIZE ("java.naming.batchsize"). Esta propiedad contiene la representación string de un entero decimal. El proveedor de servicio LDAP usa este valor para determinar cuántos resultados leer desde el servidor antes de desbloquearse--este número de resultados se llama tamaño del batch-- y permitir al programa cliente que obtenga los resultados usando next() o nextElement(). Cuando el programa cliente vacía el batch, el proveedor de servicio LDAP solicita otro batch para que el programa cliente pueda continuar con su enumeración. Si el tamaño del bacth es cero, el provedor de servcio se bloqueará hasta que se hayan leído todos los resultados. Si no se configura esta propiedad, el tamaño del batch por defecto es 1.

Cuando llamamos a search(), por ejemplo usando un tamaño de batch de n, el proveedor de servicio se bloqueará hasta que lea n resultados desde el servidor. Por eso, seleccionar el tamaño del batch a un número pequeño permite que el program se desbloquee antes. Sin embargo, provocará alguna sobrecarga al procesar todos los bacth. Si estamos esperando un gran número de resultados, podríamos querer usar un tamaño de batch mayor para minimizar el número de cambios de contexto entre el proveedor y nuestro código. Por otro lado, tener un batch muy grande también significa que necesitamos más memoria para contener los resultados. Estos son los pros-y-contras que debemos cosiderar cuando elijamos el tamaño del batch.

Aquí tenemos un ejemplo que selecciona el tamaño de batch a 10:

// Set the batch size to 10
env.put("java.naming.batchsize", "10");

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

// Perform the list
NamingEnumeration answer = ctx.list("ou=People"); 

Relación con SearchControls.setCountLimit()

Observa que la propiedad de entorno Context.BATCHSIZE no afecta de ninguna manera a la cantidad de resultados que serán devueltos. No está relacionada con SearchControls.setCountLimit().

Batchs a Nivel de Protocolo

Context.BATCHSIZE controla el tamaño del batch sólo a nivel programático. Al nivel de protocolo, una operación "search" LDAP hace que el servidor LDAP envíe inmediatamente todos los resultados al cliente. El proveedor almacena todos los resultados que recibe--esto podría causar problemas de desbordamiento de memoria.

Los servidores LDAP que soportan los controles Lista de Vistas Virtual o Resultados Paginados pueden enviar batchs de resultados al nivel de protocolo. Puedes ver más detalles sobre el uso de controles y extensiones en la lección Controles y Extensiones.


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