lunes, 17 de noviembre de 2014

Jasper Reports con iReport Multiples Bases de Datos

Al diseñar reportes con Jasper Reports e iReport en ocasiones enfrentamos la problemática de presentar en el detalle múltiples subReportes con un origen de información diferente ó utilizamos múltiples bases de datos, a continuación voy a explicar con un ejemplo como se puede realizar.

Como ejemplo vamos utilizar el caso de un reporte de facturación que tiene que presentar en el mismo detalle de movimientos, datos que se obtienen de diferentes tablas y diferentes bases de datos ya que son datos que se originan en diferentes sistemas, para lo cual diseñamos un reporte con las siguientes características:

  •  Reportes Maestro que recibe como parámetros un rango de fechas

  • El reporte maestro hace un query a una tabla del que se obtiene el listado de todas las sucursales (Oficinas Corporativas y Sucursales) y lo obtienen usando una conexión a una base de datos Microsoft SQL Server.

  • Por cada sucursal se tiene que obtener de una tabla el detalle de facturas generadas el cual se compone de facturas generadas en cada sucursal por ventas  al publico en general y en otra tabla de la misma base de datos se obtiene otras facturas generadas por otros conceptos y de otra base de datos de obtienen las facturas de movimientos del corporativo que se generan por un ERP  para poder presentar el detalle de estas tres fuentes hacemos lo siguiente:

  1. Se van crear 3 Sub-reportes cada uno va recibir como parámetros el rango de fechas global y el id de la sucursal  
      
  2. En el reportes maestro se van crear 3 bandas de detalle y en cada una vamos a colocar uno de los Sub-reportes estos van a ser llamados por cada sucursal desde el reporte maestro:       
      
  3. En cuanto a la conexión a base de datos en los primeros 2 sub-reportes utilizan la misma conexión a base de datos y por default los sub-reportes utilizan la misma conexión no hay mucho que hacer en estos dos casos :   
      
  4. En el caso del tercer sub-reporte utiliza una conexión a una base de datos de MySql y se le asigna al sub-reporte a través del connection expression previamente configurado en el iReport en  Connection o Datasource con un JDBC;    
      
      
  5. Cada uno de los sub-reportes tuvo que ser creado previamente para incluirse dentro del reporte maestro con su propio query, diseño, parámetros y conexión a a base de datos como se muestra a continuación:   
     
El ejemplo anterior tiene como objetivo el mostrar como resolver está problemática usando las herramientas de Jasper Reports e iReport, existen varias formas de realizar los mismo unas pueden ser mas eficientes que otras estaremos publicando ejemplos diferentes próximamente.

martes, 11 de noviembre de 2014

NetBeans con Hibernate y JPA

Para los que trabajan con JPA y Hibernate en NetBeans, con la liberación de la Versión 8.0.1 en muy probable que quieras utilizar la versión mas reciente de JPA con Hibernate en tus aplicaciones existentes y para esto tendrás que incluir en tu aplicación la librería que ya viene configurada en NetBeans: Hibernate 4.3.x(JPA2.1) ingresando a través del menú en tu proyecto en la opción de Properties en la opción de Libraries como se muestra a continuación :


Al dar presionar el botón Add Library nos presentara las librerías disponibles para seleccionarlas y agregarlas a nuestro proyecto como se muestra en la siguiente pantalla:


De esta forma nuestro proyecto utilizará una versión mas reciente de JPA y Hibernate pero como suele suceder se nos pueden presentar los siguientes errores los cuales se los presento a continuación:

  1. El primer error que se puede presentar en un proyecto que con una versión anterior con esta actualización en tiempo de ejecución te presentará el siguiente mensaje:                   Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.  Esto se soluciona modificando el archivo persistence.xml  modificando el tag  <provider>org.hibernate.ejb.HibernatePersistence</provider> por el siguiente  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
  2. El segundo error es también lo da en tiempo de ejecución y lanza el siguiente mensaje;  Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/jboss/jandex/IndexView.  Este error lo da por la falta de un archivo de nombre           jandex-1.1.0.Final.jar en la libreria que ya viene configurada en NetBeans y lo podemos solucionar descargando el archivo omitido del sitio Hibernate podemos descargar la versión hibernate-release-4.3.7.Final.zip solo tenemos que extraer de este zip el archivo en cuestión en \lib\required y lo adicionamos a la libreria Hibernate 4.3.x(JPA2.1) en NetBeans como se muestra en la siguiente pantalla:

Se selecciona la libreria y se le da Edit para poder adicionar el archivo que falta como se muestra a continuación: