¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Java y Eclipse
  3. Aplicación final
Extrait - Java y Eclipse Desarrolle una aplicación con Java y Eclipse (2a edición)
Extractos del libro
Java y Eclipse Desarrolle una aplicación con Java y Eclipse (2a edición)
1 opinión
Volver a la página de compra del libro

Aplicación final

Imprimir y exportar

Crear informes sofisticados, producir archivos con distintos formatos o elaborar gráficos con Java requiere tiempo y el dominio de numerosas clases y métodos adicionales. Conscientes de este hecho, varias empresas proponen herramientas de reporting que permiten realizar de manera más rápida y segura este tipo de documentos.

Se ha elegido la librería JasperReports de la empresa JasperSoft ya que es un muy buen sistema de reporting open source dedicado a aplicaciones Java. Esta herramienta puede funcionar de manera independiente a Eclipse o en colaboración con este. Jaspersoft Studio es el editor gráfico WYSIWYG (What You See Is What You Get) integrado en Eclipse que se encarga de la creación de plantillas de informes.

JasperReports es una librería escrita en Java.

1. Funcionamiento de JasperReports

Para generar informes, hay necesariamente que pasar por tres etapas: la creación del archivo Jasper describiendo el contenido del informe, la compilación de este archivo en un formato explotable por Jasper en producción y alimentarlo con datos para rellenar el informe.

Etapa 1: creación del archivo jrxml

JasperReports se basa en principio sobre archivos XML (eXtensible Markup Language). No es necesario dominar XML para esta etapa ya que la creación se realiza mediante Jaspersoft Studio, que genera el archivo correspondiente, pero es recomendable ya que llegados a cierto punto resulta más productivo intervenir directamente en el archivo XML.

Al final de esta etapa, se obtiene un archivo XML con extensión jrxml que representa la plantilla del informe desde el cual se pueden producir varios documentos con distintos formatos.

images/14eit01.png

Etapa 2: compilación del archivo jrxml y generación del archivo Jasper

A partir del archivo jrxml, llamado también plantilla jrxml, Jasper procede a su compilación que permite verificar si toda la plantilla está bien construida, sobre todo si es coherente con la norma XML y si los parámetros son correctos.

Si la compilación finaliza correctamente, se genera un archivo binario con la extensión Jasper. Se puede entonces utilizar este archivo para representar los datos dependiendo de las elecciones tomadas en el momento de la creación del archivo jrxml con Jaspersoft Studio.

También es posible compilar en tiempo de ejecución el archivo binario...

Gráficos

Se ha elegido JFreeChart para crear gráficos que, como JasperReports, es open source y está enteramente escrito en Java. JFreeChart es una librería que proporciona una API que permite a Java crear gráficos desde fuentes de datos y cuya salida es una imagen JPEG o PNG.

1. Creación con Jaspersoft Studio y JFreeChart

Para hacer la creación de gráficos aún más sencilla, se puede trabajar de nuevo con Jaspersoft Studio en tándem con JFreeChart.

Así se dispone de un editor gráfico para dibujar los gráficos, insertar eventuales parámetros y probar el resultado final como se acaba de hacer con la vista previa, la impresión y la exportación de clientes.

Se crea un gráfico sencillo, que mostrará los porcentajes de número de pedidos por mes para un año dado.

images/14EIT11b.png

 Descargue las librerías de JFreeChart del sitio web de SourceForge en la dirección siguiente: https://sourceforge.net/projects/jfreechart/files/

 Descomprima el archivo y añada las siguientes librerías a las ya presentes en el proyecto de gestión.

images/14-34.png

Antes de empezar con la creación del informe, hay que interesarse en el modelo de datos.

Cada estadística posee dos propiedades: el nombre del mes y el número de pedidos de este mes.

 Cree una clase Estadistica en el package dialogo.estadisticas.

package dialogo.estadisticas;  
  
import java.time.Month;  
import java.time.format.TextStyle;  
import java.util.Locale;  
  
public class Estadistica {  
   private final Long contador;  
     
   private final String mes;  
     
   public Estadistica(Object obj) {  
       this( (Integer) ((Object[]) obj)[0],  
             (Long) ((Object[]) obj)[1]);  
   }  
  
   private Estadistica(Integer mes, Long numero) {  
       this(Month.of(mes), numero);  
   }  
  
   public Estadistica(Month mes, Number numero) {  
       this.mes = mes.getDisplayName(TextStyle.FULL,  
 ...

Creación del ejecutable

Llegados a este punto, es momento de probar la aplicación de manera independiente de Eclipse.

Hay que crear un ejecutable (consulte el capítulo Toma de contacto de Eclipse, sección Primer ejecutable).

Para simplificar la vida respecto a todas las librerías a importar, se utiliza el proyecto Maven para recuperar todas las dependencias, es decir todos los archivos jar necesarios para que la aplicación funcione.

En efecto un proyecto desarrollado en Eclipse se beneficia del soporte de la aplicación Eclipse en sí misma: las librerías necesarias y ausentes se añaden de forma transparente. ¡Pero los usuarios de sus aplicaciones futuras no conocerán tal vez nunca Eclipse! El objetivo es darles una aplicación que sea auto suficiente: uno o dos archivos únicamente deberían bastar para ejecutar o instalar esta aplicación.

 Cree un archivo llamado pom.xml en la raíz del proyecto.

<project>  
   <modelVersion>4.0.0</modelVersion>  
   <name>ENI Java 9</name>  
  
   <groupId>com.eni</groupId>  
   <artifactId>gestion</artifactId>  
   <version>1.0.0-SNAPSHOT</version>  
  
   <properties> 
        <java.version>9</java.version> 
        <project.build.sourceEncoding>UTF-8 
</project.build.sourceEncoding> 
   </properties>  
 
   <repositories>  
       <repository>  
           <id>central</id>  
           <name>Maven Repository Switchboard</name>  
           <layout>default</layout>  
           <url>http://repo1.maven.org/maven2</url>  
           <snapshots>  
               <enabled>false</enabled>  
           </snapshots>  
       </repository>  
   </repositories>  ...

Vaya más lejos

La aplicación de gestión es ahora funcional para un usuario.

Quedan sin embargo muchos ejes de trabajo posibles:

  • Debe ser posible que varios usuarios trabajen simultáneamente sobre los mismos datos.

  • Las interfaces gráficas de los usuarios deben actualizarse cuando alguien modifica un dato.

  • Un usuario debe poder crear, editar y eliminar categorías y proveedores.

  • ¡La recompensa principal de una aplicación bella y agradable de utilizar es aún más trabajo, ya que proporciona ideas a los usuarios! Espere a recibir feedback de los usuarios...

Con respecto al primer punto descrito, la aplicación debe poder gestionar varios usuarios que puedan encontrarse en cualquier punto del planeta.

Más allá de la modificación consistente en autenticarse con combinaciones de usuario/contraseña diferentes (mediante una tabla dedicada, un directorio LDAP,...), es importante que cada usuario recupere la información correcta, sobre todo aquella que sea temporal.

¡Sin embargo, un usuario situado en Buenos Aires o Katmandú no verá las mismas fechas de pedido que un usuario situado en Madrid!

Esto es debido al hecho de que la información temporal almacenada en la base de datos no tiene en cuenta el huso horario. La fecha del pedido se almacena con el formato 2015-05-25 21:26:33. ¡Y al recuperar los datos por JPS, esta fecha está combinada con el huso horario local del usuario!

¿Cómo resolver este problema? Existen varias alternativas posibles:

  • Cambiar en la base de datos el formato de la fecha y hora por un dato de tipo long que representará el número de milisegundos (o de segundos) transcurridos desde el 1 de Enero de 1970 a medianoche UTC.

    Esta solución no es muy conveniente ya que entonces será imposible crear de manera sencilla el gráfico de estadísticas. Para esto hay que guardar las fechas con el formato SQL TIMESTAMP.

  • Almacenar la información de huso horario en una columna adicional y combinar ambas informaciones para obtener una fecha uniforme.

    Esta solución tampoco es conveniente ya que impone también una gimnástica algorítmica al generar...