Download Generador Gráfico para Aplicaciones Java™ EE
Document related concepts
no text concepts found
Transcript
Generador Gráfico para Aplicaciones Java™ EE Víctor D. Castillo Díaz 1,Chadwick Carreto Arrellano 2 y F. Rolando Menchaca García3 Centro de Nacional de Cálculo-IPN, Av. Miguel Otón de Mendizábal, esquina Av. Miguel Bernard, Edif. Secretaría de Administración 2do. Piso, Col. La Escalera, Delegación Gustavo A. Madero, C. P. 07738, México, D.F. 1 2 3 vcastillo@ipn.mx, ccarretoa@ipn.mx, fmenchac@ipn.mx Resumen. Las gráficas son una atractiva opción para representar datos tabulares en una página web, desafortunadamente mantenerlas al día es una tarea que puede complicarse si los datos presentan cambios constantes, pues la representación gráfica debe generarse nuevamente cada vez que se refresquen los datos. El presente documento describe el diseño e implementación del Generador Gráfico, una herramienta que permite al código de su aplicación generar diversos tipos de representaciones gráficas de la información a partir de los datos más recientes disponibles e integrarlas en su aplicación Java EE de forma automática. El Generador Gráfico se emplea actualmente en el desarrollo del Sistema Institucional de Información del Instituto Politécnico Nacional. Palabras Clave: Gráficas dinámicas, Patrones de diseño, Java EE. 1 Introducción El Generador Gráfico (GG) es un paquete de clases diseñado para simplificar el proceso de acceso, extracción y conversión de los datos a los que se desea crear una representación gráfica particular. Debido a la amplia diversidad de tipos de gráficas, sería un gran esfuerzo construir un paquete de clases que diera soporte aun a los tipos más comunes, por lo que en lugar de desarrollarlo por nosotros mismos optamos por seleccionar alguno que cumpliera nuestros requerimientos. Nos inclinamos por JFreeChart, debido a que es un paquete gráfico de fuente abierto, completo y ampliamente usado. Además se utilizo el framework de Struts como implementación del patrón Modelo-Vista-Controlador (MVC). Finalmente pueden apreciarse los resultados del GG gracias al Sistema Institucional de Información (SII), una aplicación Java EE que se encuentra en una etapa avanzada de desarrollo. El resto de este artículo se organizo de la siguiente forma, la sección 2 contiene una breve percepción de la situación actual en cuanto a representación gráfica de información. En la sección 3 se presenta metodología empleada en el diseño e implementación del GG. La sección 4 describe los resultados obtenidos al integrar el GG al SII que actualmente se encuentra en desarrollo dentro del Centro Nacional de Cálculo (CENAC) del Instituto Politécnico Nacional (IPN). Finalmente la sección 5 presenta nuestras conclusiones y los trabajos futuros. 2 Estado del Arte La representación gráfica de los datos es un tópico de amplio interés y complejidad, basta observar en revistas o páginas web la cantidad de compañías que ofrecen paquetes gráficos para realizar el análisis y la visualización de datos. La mayoría de estos paquetes presentan un problema en común: requieren un formato especifico de los datos, para que ellos los puedan entender. Claro que con esto se pierde flexibilidad al tomar información de diversas fuentes y tener que aplicarles un formato especifico. El generador gráfico que se describe en este artículo permite extraer y usar información desde cualquier base de datos, gracias a que no requiere un particular formato de los mismos con lo cual es posible automatizar en su totalidad el proceso, desde la extracción hasta la visualización gráfica de los datos. 3 Metodología Empleada Desde la concepción del GG se definieron los siguientes objetivos de diseño que guiaron todo el proceso de desarrollo: Separar el proceso de acceso, extracción y conversión de datos, el proceso de generación y ajuste de las características visuales de las gráficas y el proceso de despliegue. Automatizar los procesos anteriormente mencionados. Tener amplia disponibilidad y evitar el uso de herramientas adicionales del lado del cliente (plug-ins, applets, componentes ActiveX, etc). Para cumplir estos objetivos se decidió diseñar el GG acorde a una arquitectura de tres capas basada en web que separa las capas de presentación, lógica de negocios y acceso a datos; más algunos patrones de diseño estándar de Java EE [1]. Nota: Todo los datos técnicos mencionados en este articulo requieren la versión 0.1.0 del GG y las librerías JFreeChart versión 0.9.20 [2] y JCommon versión 0.9.5 [3]. 3.1 Patrones de diseño Entre los diversos patrones de diseño que empleamos, destaca el patrón MVC [4] cuyo principal objetivo es separar la lógica de negocios, presentación de datos e interacción de los usuarios, por medio de: 1) Un modelo que representa la lógica de negocios que gobierna el acceso y actualización de los datos, se implementa por medio de JavaBeans o EJBs, 2) La vista que se hace tangible como la interfaz de usuario y se implementa por medio de páginas JSP, y 3) El controlador que transforma las interacciones del usuario en la vista y las traduce en acciones que el modelo debe realizar, estas acciones son implementadas por medio de Sevlets. Se emplea Struts [5] como implementación del patrón MVC, pues ofrece: Configuración centralizada (struts-config.xml). Internacionalización por medio de archivos de propiedades. Validación de datos. Librería de etiquetas JSP (HTML, Bean, Logic, etc). Soporte de extensiones como Tiles, que ayuda a construir páginas a partir de pequeños fragmentos. Otros patrones de diseño usados son el Data Access Object (DAO) [6] que: Separa la interfase de las fuentes de datos de sus mecanismos de acceso. Permite adaptar un API específica para acceso a fuentes de datos a una interface genérica. y el Value Object (VO) [7] que permite: Múltiples propiedades empaquetas en un objeto transferible, para no tener que manejar referencias entre capas. Elimina tráfico en la red durante solicitudes de datos entre las capas de presentación y negocios. Fig. 1. Arquitectura de una aplicación Java EE basada en el patrón de diseño MVC. Además de las tecnologías Java SE, Java EE y los patrones de diseño, se empleo una librería gráfica ampliamente utilizada llamada JFreeChart [8] que ofrece: Diversos tipos de gráfica (Pastel 2D y 3D, Barras 2D y 3D, Barras apiladas 2D y 3D, Línea, Área). Soporte para servlets, applets o aplicaciones cliente. Acceso a datos por medio de objetos Dataset. Exporta a imagen con formato PNG y JPEG. Escrito para Java (JDK 1.2.2 o superior). Código fuente abierto protegido por la licencia GNU LGPL. 3.2 Descripción del paquete de clases gg.action.chart: Este paquete contiene a la clase ChartAction que extiende a la clase Action de Struts, la cual a su vez extiende a un objeto de tipo Servlet y se encarga de entregar los datos y pedir a las clases encargadas de generar y ajustar las gráficas que se haga lo necesario para obtener la gráfica que finalmente se encarga de insertar en la respuesta a la solicitud http generada. gg.action.data: Define a la clase GetDataSeriesAction que también extiende de Action y se encarga de insertar en la solicitud HTTP los datos que la clase ChartAction pasara a las clases descritas en el siguiente paquete para que realicen su trabajo. gg.chart: Aquí se encuentran las clases ColorSeries, CustomizeChart y GenerateChart, responsables de definir los colores adecuados para cada tipo de gráfica, realizar los ajustes estéticos y generar la gráfica respectiva. Fig. 2. Diagrama de clases del Generador Gráfico. gg.data: En este paquete encontramos a la clase GenericDataset que se encarga de realizar el manejo genérico de las series y categorías de datos. gg.db.vo: Contiene la clase GenericVO, que realiza de forma genérica la transferencia de datos entre las capa de acceso a datos y la capa de la lógica de negocios. gg.db.dao: Este paquete aloja a la clase GenericDAO que es responsable de acceder a la fuente de datos para entregarlos a la clase GenericVO y DAOException que se encarga de crear y enviar un mensaje de excepción apropiado en caso de que durante la ejecución de los métodos de la clase GenericDAO se presente algún problema. gg.db.dbms.mysql: Clase MysqlDB que realiza la implementación de la interface DBInterface para acceder al manejador de bases de datos MySQL. gg.db.dbms.oracle: Clase OracleDB que realiza la implementación de la interface DBInterface para acceder al manejador de bases de datos Oracle. gg.db: Finalmente este paquete contiene a la interface DBInterface que permite homogeneizar las API de acceso a diversos DBMSs. 4 Resultados Experimentales Crear una aplicación web basada en el generador gráfico, que despliegue gráficas dinámicas a partir de datos extraídos de una base de datos particular no es muy complicado y cabe señalar que gracias al patrón DAO resulta muy simple cambiar prácticamente a cualquier manejador de base de datos. Pasos para generar una gráfica: Debe obtenerse la serie o series de datos por medio de algún DAO. Con base en estos datos, se crean estructuras de datos internas apropiadas. Se determina el tipo de gráfica deseada. Se configura la apariencia de la gráfica. Se crea la gráfica y se envía al navegador como una imagen PNG o JPEG incrustada en una página web. 4.1 Series de datos Para obtener nuestra primer gráfica, la series de datos se compone por el total de alumnos graduados por cada escuela en un año determinado y los nombres de las respectivas escuelas son las leyendas que definen a que concepto corresponde cada valor de de la serie de datos, está información es representada por medio de una gráfica de tipo barras en 3D (ver Fig. 3), aunque podría usarse cualquiera de los diversos tipos de gráfica que JFreeChart soporta. Fig. 3. Gráfica de los estudiantes graduados por plantel en un periodo determinado. Aunque la Fig. 3 empleo solo una categoría de datos, es posible tener gráficas con múltiples categorías de datos, una categoría de datos es una agrupación de elementos similares, por ejemplo los alumnos inscritos en cada área del conocimiento pueden agruparse por medio del nivel educativo (ver Fig. 4). Fig. 4. Gráfica agrupada por medio de niveles educativos. 5 Conclusiones y Trabajos Futuros Actualmente el generador gráfico se encuentra en su primer versión estable, se tiene la fortuna de estar siendo probado en el contexto de un sistema como el SII que presenta un uso intensivo de gráficas. Gracias a esto será posible detectar los puntos en que el generador presente problemas o no satisfaga los requerimientos. Particularmente nos interesa incluir en la próxima versión del generador, soporte para trabajar con imágenes sensitivas (mapas), de tal manera que la navegación pueda ser más intuitiva al permitir seleccionar elementos de la imagen como vínculos hacia un mayor detalle. Reconocimientos. Los autores de este trabajo agradecen al Centro Nacional de Cálculo y al Instituto Politécnico Nacional por ofrecer un favorable ambiente laboral y académico, así como todas las facilidades necesarias para el desarrollo de este artículo. Referencias [1] Sun Microsystems, Java BluePrints Patterns Catalog, http://java.sun.com/blueprints/patterns/ catalog.html, Sun Microsystems, 2002. [2] David Gilbert y Thomas Morgner, The JFreeChart Home Page, http://www.jfree.org/ jfreechart/, Object Refinery Limited, 2005. [3] David Gilbert y Thomas Morgner, The JCommon Home Page, http://www.jfree.org/ common/, Object Refinery Limited, 2005. [4] Sun Microsystems, Java BluePrints Patterns Catalog, http://java.sun.com/blueprints/patterns/ MVC-detailed.html, Sun Microsystems, 2002. [5] Craig R. McClanahan, David Geary, Mike Schachter, Ted Usted, Martin Cooper, Arron Bates, Cedric Dumoulin, David Winterfeldt, Chris Assenza, dIon Gillard, Dominique Plante, Ed Burns, Eric Wu, James DeVries, John Rousseau, John Ueltzhoeffer, Larry McCay, Mark Budai, Matthias Kerkhoff, Paul Runyan, Robert Hayden, Robert Leland, Stanley Santiago, Wong Kok Kai, Donald Ball, Dan Walter, Eddie Bush, Yann Cebron y David Graham, The Struts User´s Guide, http://struts.apache.org/userGuide/index.html, versión 1.2.4, The Apache Software Foundation, 2005. [6] Sean C. Sullivan, Advanced DAO programming, http://www-128.ibm.com/developerworks/ java/library/j-dao/, Sun Microsystems, 2002. [7] Sun Microsystems, Core J2EE Pattern Catalog, http://java.sun.com/blueprints/corej2ee patterns/Patterns/TransferObject.html, Sun Microsystems, 2003. [8] David Gilbert, The JFreeChart Class Library Developer Guide, Version 1.0.0 pre1, Object Refinery Limited, 2005.