lunes, 8 de julio de 2013

VALUE LIST HANDLER

VALUE LIST HANDLER

CONTEXTO

El cliente requiere una lista de elementos del servicio de presentación. El número de elementos de la lista no se conoce y puede ser muy importante en muchos casos.

PROBLEMA

La mayoría Plataforma Java 2, Enterprise Edition (J2EE) tiene una búsqueda y exigencia de consulta para buscar y listar ciertos datos. En algunos casos, como una operación de búsqueda y consulta podría producir resultados que pueden ser muy grandes. No es práctico para devolver el conjunto de resultados completo cuando las necesidades del cliente son para recorrer los resultados, en lugar de los procesos del sistema completo. Normalmente, un cliente utiliza los resultados de una consulta de sólo lectura fines, como mostrar la lista de resultados. A menudo, el cliente ve sólo los primeros registros coincidentes, y luego puede descartar los registros restantes e intentar una nueva consulta. La actividad de búsqueda a menudo no se trata de una operación inmediata en los objetos correspondientes. La práctica de obtener una lista de los valores representados en los beans de entidad llamando a un ejbFind () método, que devuelve una colección de objetos a distancia, y luego llamar a cada bean de entidad para obtener el valor de la red es muy caro y se considera una mala práctica.

Hay consecuencias asociadas con el uso de Enterprise JavaBeans (EJB) métodos de búsqueda que se traducen en grandes conjuntos de resultados. Cada implementación de contenedor tiene una cierta cantidad de sobrecarga método de búsqueda para la creación de una colección de referencias EJBObject. Rendimiento de conducta método Finder es variable, dependiendo de la implementación de contenedores de un proveedor. De acuerdo con la especificación EJB, un contenedor puede invocar ejbActivate () métodos de entidades encontradas por un método de búsqueda. Como mínimo, un método de búsqueda devuelve las claves primarias de las entidades a juego, que el contenedor devuelve al cliente como una colección de referencias EJBObject. Este comportamiento se aplica para todas las implementaciones de contenedores.Algunas implementaciones de contenedores pueden introducir método adicional overhead buscador al asociar las instancias de beans de entidad de estos casos EJBObject para dar al cliente el acceso a los beans de entidad. Sin embargo, este es un mal uso de los recursos si el cliente no está interesado en el acceso al bean o invocar sus métodos. Esta sobrecarga puede obstaculizar de forma significativa el rendimiento de aplicaciones si la aplicación incluye consultas que producen muchos resultados coincidentes.
BENEFICIOS

·         La aplicación cliente necesita un servicio de consulta eficaz para evitar tener que llamar al bean de entidad ejbFind () método y la invocación de cada objeto remoto devolvió.
·         Se necesita un mecanismo de almacenamiento en caché de servidor de nivel para atender a clientes que no pueden recibir y procesar todo el conjunto de resultados.
·         Una consulta que se ejecuta en varias ocasiones en los datos razonablemente estáticos puede ser optimizado para proporcionar resultados más rápidos. Esto depende de la aplicación y en la implementación de este patrón.
·         Métodos de búsqueda EJB no son adecuados para la navegación tablas enteras en la base de datos o para la búsqueda de grandes conjuntos de resultados de una mesa.
·         Los métodos de búsqueda pueden tener una sobrecarga considerable cuando se utiliza para encontrar un gran número de objetos de resultado. El recipiente puede crear un gran número de objetos de infraestructura para facilitar los buscadores.
·         Métodos de búsqueda EJB no son adecuados para el almacenamiento en caché los resultados. El cliente puede no ser capaz de manejar todo el conjunto de resultados en una sola llamada. Si es así, el cliente puede necesitar el almacenamiento en caché del lado del servidor y las funciones de navegación para atravesar el conjunto de resultados.
·         Métodos de búsqueda EJB han determinado construcciones de consulta y ofrecer una flexibilidad mínima. La especificación EJB 2.0 permite un lenguaje de consulta, EJB QL, para gestionadas por contenedor beans de entidad. EJB QL hace que sea más fácil escribir buscadores portátil y ofrece una mayor flexibilidad para realizar consultas.
·         Cliente quiere desplazarse hacia adelante y hacia atrás dentro de un conjunto de resultados.

SOLUCIÓN

Utilice un Value List Handler para controlar la búsqueda, almacenar en caché los resultados y presentar los resultados al cliente en una lista de productos cuyo tamaño y recorrido cumple con los requisitos del cliente.

Este patrón crea una ValueListHandler para controlar la funcionalidad de ejecución de la consulta y los resultados de almacenamiento en caché. El ValueListHandler accede directamente a DAO que puede ejecutar la consulta requerida. El ValueListHandler almacena los resultados obtenidos a partir de la DAO como una colección de objetos de transferencia. El cliente solicita la ValueListHandler para proporcionar los resultados de la consulta, según sea necesario. El ValueListHandler implementa un patrón Iterator [GoF] para proporcionar la solución.






ESTRUCTURA

Ilustra el patrón Value List Handler.




Lista de valores de controlador Diagrama de Clases.

Participantes y Colaboraciones

Muestra las interacciones de los Value List Handler.
 



Lista de valores de controlador de secuencia Diagrama

ValueListIterator

Esta interfaz puede proporcionar instalación de iteración con los siguientes métodos de ejemplo:

·         getSize () obtiene el tamaño del conjunto de resultados.
·         getCurrentElement () obtiene la corriente Transfer Object de la lista.
·         getPreviousElements (int howMany) obtiene una colección de Transfer Objects que se encuentran en la lista antes de que el elemento actual.
·         getNextElements (int howMany) obtiene una colección de objetos de transferencia que están en la lista después de que el elemento actual.
·         ResetIndex () restablece el índice para el inicio de la lista.
Dependiendo de la necesidad, otros métodos de conveniencia se pueden incluir para ser parte de la interfaz de ValueListIterator.

ValueListHandler

Este es un objeto manejador de listas que implementa la interfaz ValueListIterator. El ValueListHandler ejecuta la consulta requerida cuando lo solicite el cliente. El ValueListHandler obtiene los resultados de la consulta, que se gestiona en una colección privada representada por el objeto ValueList. El ValueListHandler crea y manipula la colección ValueList. Cuando el cliente solicita los resultados, el ValueListHandler obtiene los objetos de transferencia de la ValueList caché, crea una nueva colección de Transfer Objects, serializa la colección, y lo envía de vuelta al cliente. El ValueListHandler también rastrea el índice actual y el tamaño de la lista.

DataAccessObject

El ValueListHandler puede hacer uso de un DataAccessObject mantener separadas la ejecución de la conexión a la base de datos. El DataAccessObject proporciona una API simple para acceder a la base de datos (o cualquier otro almacén persistente), ejecutar la consulta, y recuperar los resultados.

ValueList

El ValueList es una colección (una lista) que contiene los resultados de la consulta. Los resultados se almacenan como objetos de transferencia. Si la consulta no devuelve ninguna coincidencia, entonces esta lista está vacía. El bean de sesión ValueListHandler almacena ValueList para evitar repetirse, ejecución innecesaria de la consulta.

TransferObject

El TransferObject representa una vista de objetos del registro individual de los resultados de la consulta. Es un objeto serializable inmutable que proporciona un marcador de posición para los atributos de datos de cada registro.




No hay comentarios:

Publicar un comentario