domingo, 7 de julio de 2013

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.


Fuerzas:

  • 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.

Estructura
El diagrama de clases en la Figura 8.29 ilustra el patrón Value List Handler. 

 

Figura 8.29 Lista de valores de controlador Diagrama de Clases 

Participantes y Colaboraciones
El diagrama de secuencia de la Figura 8.30 muestra las interacciones de los Value List Handler. 
 


Figura 8.30 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.



Consecuencias
·         Proporciona una alternativa a EJB Finders para grandes consultas
Normalmente, un método de búsqueda EJB es un uso intensivo de recursos y una manera costosa de obtener una lista de elementos, ya que implica una serie de referencias EJBObject. El Value List Handler implementa un bean de sesión que utiliza un DAO para realizar la consulta y la creación de una colección de Transfer Objects que coinciden con los criterios de la consulta. Debido Transfer Objects tienen relativamente bajos costos en comparación con las referencias EJBObject y su infraestructura asociada, este patrón proporciona beneficios cuando los clientes de aplicación requieren consultas que resulten en grandes conjuntos de resultados.
·         Cachés de resultados de la consulta en el lado del servidor
El conjunto de resultados obtenido a partir de una ejecución de la consulta debe ser almacenado en caché cuando un cliente debe mostrar los resultados en pequeños subgrupos en lugar de en una lista grande. Sin embargo, no todos los clientes basados ​​en navegador puede realizar dicha caché. Cuando no pueden, el servidor debe proporcionar esta funcionalidad. El patrón Value List Handler proporciona una instalación de almacenamiento en caché en la lista de beans de sesión Manejador de valor para mantener el conjunto de resultados que obtiene de una ejecución de la consulta. El conjunto de resultados es una colección de Transfer Objects que se pueden serializar si es necesario.
Cuando el cliente solicita una colección, o un subconjunto de una colección, el bean manejador devuelve los resultados solicitados como una colección serializada de Transfer Objects. El cliente recibe la colección y ahora tiene una copia local de la información solicitada, que el cliente puede visualizar o procesar. Cuando el cliente necesita un subgrupo adicional de los resultados, se solicita el controlador para volver otra colección serializada que contiene los resultados necesarios. El cliente puede procesar los resultados de la consulta en más pequeñas y manejables. El bean manejador también proporciona al cliente facilidades de navegación (anterior y posterior), de modo que los resultados pueden ser recorridos hacia adelante y hacia atrás si es necesario.
·         Proporciona una mejor flexibilidad Consulta
Adición de una nueva consulta puede requerir la creación de un nuevo método de búsqueda o modificar un método existente, especialmente al usar frijol gestionados beans de entidad. (Con gestionadas por bean beans de entidad, el desarrollador implementa los métodos de búsqueda de la implementación del bean.) Con una gestionada por contenedor bean de entidad, el programa de implementación especifica la entidad métodos de búsqueda de frijol en el descriptor de despliegue del bean. Los cambios en una consulta para un bean controlado por contenedor requieren cambios en la especificación del método de búsqueda en el descriptor de despliegue. Por lo tanto, métodos de búsqueda son poco adecuados para manejar los requerimientos de consulta que cambian dinámicamente. Puede implementar un Value List Handler para ser más flexible que los métodos de búsqueda EJB, proporcionando facilidades de consulta ad hoc, la construcción de argumentos de consulta en tiempo de ejecución utilizando métodos de plantilla, y así sucesivamente. En otras palabras, un desarrollador Value List Handler puede implementar algoritmos de búsqueda y almacenamiento en caché inteligente sin estar limitado por los métodos de búsqueda.
·         Mejora el rendimiento de la red
Rendimiento de la red puede mejorar, porque los datos sólo solicitados, en lugar de todos los datos, se envían (serializados) al cliente sobre una base como-necesaria. Si el cliente muestra los primeros resultados y luego abandona la consulta, el ancho de banda de red no se desperdicia, ya que los datos se almacena en caché en el lado del servidor y nunca se envía al cliente. Sin embargo, si el cliente procesa el conjunto de resultados, hace varias llamadas remotas al servidor para el conjunto de resultados. Cuando el cliente sabe de antemano que tiene el conjunto de resultados, el bean manejador puede proporcionar un método que envía el cliente de todo el conjunto de resultados de una llamada a un método, y la función de caché del patrón no se utiliza.
·         Permite el aplazamiento de transacciones de beans de entidad
Almacenamiento en caché los resultados en el lado del servidor y minimizando el gasto buscador puede mejorar la gestión de transacciones. Cuando el cliente está listo para procesar más de un bean de entidad, se accede al bean dentro de un contexto de transacción definida por el caso de uso. Por ejemplo, una consulta para mostrar una lista de los libros utiliza un Value List Handler para obtener la lista. Cuando el usuario quiere ver un libro en detalle, se trata del libro bean de entidad en una transacción.


(© 2001-2002 Sun Microsystems, Inc. Todos los derechos reservados.)



 

No hay comentarios:

Publicar un comentario