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