Cómo integrar JasperReports con Oracle APEX #JoelKallmanDay

Cómo integrar JasperReports con Oracle APEX #JoelKallmanDay

Integración de JasperReportIntegration con Oracle APEX en Windows

Introducción

En esta ocasión veremos cómo integrar los reportes de JasperReports con Oracle APEX mediante la utilización del reporsitorio JasperReportsIntegration creado por Dietmar Aust. Los reportes pueden ser generados mediante Jaspersoft Studio o también iReport.

Si bien esta integración se basa en JasperReport, no se limita a ella. se puede ampliar fácilmente para llamar a cualquier otro motor de reportes que proporcione una interfaz basada en URL para ejecutar informes, por ejemplo Oracle Reports, BIRT o Crystal Reports.

Descargar Repositorio

  • Haz clic aquí para descargar JasperReportsIntegration

  • Al ingresar página nos apacerán distintas versiones, en este caso utilizaré la última versión disponible al momento de realizar este post (Versión 2.10.1) la cual según nos indica la documentación es compatible con JasperSoft versión 6.20, para descargarlo nos dirigimos al apartado de Assets y descargamos el archivo de extensión .tar

Una vez descargado, extraemos los archivos en una carpeta y seguimos.

Recomendaciones

Se recomienda separar los archivos de configuración y reportes de la propia aplicación J2EE. En las primeras versiones de JasperReportsIntegration, todos los informes se colocaban directamente en la aplicación web, por ejemplo, en el directorio $TOMCAT_HOME/webapps/reports. Por ende y para poder actualizar fácilmente su instalación en el futuro, se recomienda colocar los archivos de configuración y de reportes en un directorio separado y no almacenarlos dentro de la aplicación J2EE.

De todos modos, la aplicación J2EE debe poder localizar estos archivos.

Configurar el entorno del servidor

Crear la estructura de directorios requerida

Como primer paso debemos crear la estructura de directorio requerido para la instalación, esta se encargará de almacenar los archivos de configuración y reportes de nuestro Jasper.

Entonces procedemos a crear la siguiente estructura c:\app\JasperReportsIntegración, luego simplemente copiamos los directorios conf, reports y logs al directorio que hemos creado.

Obs: En caso de que no exista la carpeta logs solo debes crearla. quedaría de esta manera:

Configurar el directorio de configuraciones en el archivo jri.war

Lo que haremos aquí será indicarle al archivo jri.war donde se encuentra nuestro directorio de configuración, En este ejemplo nuestro directorio de configuración sería c:\app\JasperReportsIntegration. (Tú puedes establecer el directorio que desees, siempre y cuando contenga la estructura mencionada en el punto anterior).

¿Como lo configuramos? Para ello debemos acceder a la carpeta bin que se encuentra dentro de la carpeta de instalación del JasperReportsIntegracion.

Una vez dentro abrimos la consola de windows en dicha ubicación y ejecutamos lo siguiente:

setConfigDir.cmd ..\webapp\jri.war c:\app\JasperReportsIntegration

Observación: En caso de que utilices powershell (windows 11) ejecútalo de esta manera.

.\setConfigDir.cmd ..\webapp\jri.war c:\app\JasperReportsIntegration

Nos arrojará el siguiente resultado, con lo cual quedaría finalizado este proceso.

Verificar el directorio de configuración

Para verificar que se haya establecido correctamente el directorio de configuración, nos ubicamos nuevamente dentro de la carpeta bin y abrimos la consola de windows.

Luego ejecutamos lo siguiente:

getConfigDir.cmd ..\webapp\jri.war

Observación: En caso de que utilices powershell (windows 11) ejecútalo de esta manera.

.\getConfigDir.cmd ..\webapp\jri.war

Como resultado deberíamos visualizar el directorio establecido anteriormente.

Configurar el acceso a la base de datos

Para configurar el acceso a la base de datos debemos editar el archivo application.properties ubicado dentro de la carpeta conf que habiamos copiado previamente.

Dentro de archivo buscamos la sección datasource:default y configuramos con los parámetros de necesarios para conectarnos a nuestra base de datos.

Observaciones: Recuerda que la sintaxis de conexión puede variar en caso de utilizar SID o Service name. Ejemplo:

  • Con SID: jdbc:oracle:thin:@127.0.0.1:1521:XEPDB1

  • Con Service Name: jdbc:oracle:thin:@//127.0.0.1:1521/XEPDB1

Despliegue de la Aplicación en Apache Tomcat

Para realizar el despliegue de la aplicación ingresamos a la carpeta webapp ubicada en carpeta de instalación de JRI, copiamos el archivo jri.war y lo llevamos a la carpeta webapps del tomcat, tal como lo vemos en la siguiente imagen.

Ahora reiniciamos el tomcat y automáticamente nos generará una carpeta del mismo nombre que nuestro archivo, lo que indica que ya fue desplegada.

Para comprobarlo accedemos a nuestro servidor desde el navegador y agregamos /jri a la URL Ej.: <tomcat_host>:<tomcat_port>/jri

Si todo funciona correctamente deberías ver una pantalla similar a esta.

Comprobar la conexión la base de datos

Para comprobar la conexión a la base de datos, ingresamos a la pantalla de información del JasperReportsIntegration y en la sección Basic connectivity tests seleccionamos Test y en caso de una conexión exitosa veremos esta pantalla.

Caso contrario nos aparecerá error 500 y nos mencionará el motivo de dicho error.

Comprobar la visualización de reportes

Adicional al test de conexión, la pantalla de información también nos permite visualizar un reporte de prueba. Para ello solo presionamos el botón de test report y nos mostrará el reporte.

Configuraciones de Seguridad

Encriptar las contraseñas de base de datos

Para encriptar las contraseñas debemos modificar el archivo application.properties, por lo cual debemos acceder nuevamente a la carpeta de instalación, concretamente a la carpeta bin y abrir la consola de windows tal como lo hemos hecho anteriormente.

Luego ejecutamos lo siguiente, haciendo siempre referencia a nuestro directorio de configuración:

encryptPasswords.cmd c:\app\JasperReportsIntegration\conf\application.properties

Observación: En caso de que utilices powershell (windows 11) ejecútalo de esta manera.

.\encryptPasswords.cmd c:\app\JasperReportsIntegration\conf\application.properties

Luego de ejecutar el comando, si nos fijamos nuevamente en nuestro archivo application.properties veremos que la contraseña de base de datos ya se encuentra encriptada.

Hecho esto, solo quedaría reiniciar el servidor para aplicar los cambios y listo.

Desactivar el InfoPage

Dado que la página de inicio informa mucho sobre nuestro servidor, normalmente en un entorno de producción esta información debería permanecer oculta. Por lo tanto, debemos editar el archivo application.properties ubicado dentro de la carpeta conf de nuestro directorio de configuración y establecer el parámetro de configuración infoPageIsEnabled a false.

Guardamos los cambios y reiniciamos el servidor. Con esto nuestra información permanecerá oculta y al ingresar nuevamente al InfoPage nos aparecerá el siguiente mensaje.

Instalación de Objetos de Base de Datos

Ahora que nuestro JRI ya se encuentra instalado en el servidor de aplicaciones, lo siguiente que debemos hacer es instalar los objetos de BD necesarios para su funcionamiento desde el APEX.

Archivos de Instalación y acceso a SQLPlus

Necesitamos acceder a la carpeta sql dentro de los archivos de instalación y ejecutar el archivo sys_install.sql, para ello accedemos a la consola de comandos, nos ubicamos dentro de los archivos de instalación e ingresamos al sqlplus.

Para ahorrarte algo de tiempo, ejecuta la consola como administrador y luego ingresa el siguiente comando.

cd %userprofile%\Downloads\jri*\sql & dir & sqlplus /nolog

Observación: En caso de que utilices powershell (windows 11) ejecútalo de esta manera.

 cd $env:userprofile/Downloads/jri*/sql; dir; sqlplus /nolog

Otorgar privilegios al usuario propietario de los paquetes de integración

Cómo primer paso debemos conectarnos a la base de datos utilizando el usuario sys, la sintaxis de conexión es la siguiente.

conn [username]/[password]@[DB service name] [AS SYSDBA]

Ten en cuenta la siguiente imagen como referencia.

Como siguiente paso debemos otorgar los privilegios necesarios al usuario será propietario de los paquetes para la integración, para ello ejecutamos el archivo de nombre sys_install.sql y especificamos el nombre del esquema que será propietario de los paquetes, en este caso sería el esquema en el cuál fue instalado el APEX.

@sys_install.sql [application schema]

Una vez que ejecutemos el archivo, este concederá algunos permisos al esquema indicado y nos deberá arrojar un mensaje de concesión exitósa para cada uno de ellos.

Otorgar privilegios de red al esquema

Debemos otorgar los privilegios de red necesarios al esquema de la aplicación. aquí debemos tener en cuenta que si nuestra versión de BD Oracle es la 11g ejecutamos el archivo sys_install_acl_11g.sql, en caso de ser una versión superior ejecutamos el archivo sys_install_acl_12_and_above.sql. Estos archivos se encargarán de crear los ACL's necesarios para la conexión al servidor.

También debemos tener presente el esquema de instalación (donde se encuentra el APEX) y el nombre de dicho servidor.

En mi caso tengo la base de datos Oracle 21c XE, el esquema testing y mi servidor localhost por lo que la sintaxis en este caso sería:

@sys_install_acl_12_and_above.sql testing localhost

Una vez ejecutemos el código nos solitirará una confirmación, presionamos la tecla enter y procederá con la configuración.

Instalación de objetos de BD desde el esquema propietario

Ahora solo nos resta instalar los objetos necesarios para la integración con Oracle APEX, para ello debemos conectarnos al sqlplus con el esquema donde se encuentra instalado Oracle APEX.

Si aún estamos conectados al sqlplus con relación al paso anterior, debemos salir utilizando el comando exit, luego debemos establecer una variable de entorno para establecer la codificación de los archivos en formato AL32UTF8 ejecutando:

set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

Seguidamente nos conectamos nuevamente al sqlplus utilizando el esquema donde se encuentra nuestro APEX.

sqlplus [application_schema]/[schema_password]@[service_name]

Una vez conectados ejecutamos el archivo user_install.sql.

Al ejecutar el archivo veremos que se irán creando varios objetos de base de datos como tablas, procedimientos y paquetes. Los cuales serán utilizados por el Oracle APEX.

Al finalizar nos indicará si hubo algún objeto no válido, en caso contrario nos indicará que todos los objetos fueron creados correctamente.

Mostrar un Reporte desde Oracle APEX

Finalmente llegamos a la llamada del reporte, para esto solo debemos crear un proceso en nuestra página de APEX y agregar el siguiente código:

begin
    --agregar parámetros al reporte
    l_parametros := 'parametro1=' || apex_util.url_encode(:p1_campo_ejemplo1);
    l_parametros := l_parametros || '&parametro2=' || apex_util.url_encode(:p1_campo_ejemplo2);    
    --llamada del reporte, solo necesitamos el nombre del archivo .jasper
    xlib_jasperreports.show_report(
        p_rep_name => 'NombreReporte',
        p_additional_params => l_parametros
    );
    --detiene el renderizado de la página una vez desplegado el reporte
    apex_application.stop_apex_engine;
exception
    when apex_application.e_stop_apex_engine then
        null;
end;

Obs: Tener en cuenta que los reportes deben ser enviados a la carpeta de reportes especificada al principio del post.

Seguidamente creamos un botón de tipo Submit el cuál realizará la ejecución del proceso automáticamente, luego guardamos los cambios y ejecutamos la página.

Al presionar el botón nuestro reporte debería poder visualizarse sin problemas generando una URL similar a la que vemos en la imagen.

Conclusión

!! Llegamos a final del post !!

Si bien es algo extenso contiene mucha información que espero te sea de utilidad, desde la instalación pasando por las configuraciones de seguridad hasta su integración con Oracle APEX. Todo en un paso a paso y de manera ordenada.

Si tienes dudas o sugerencias o algún otro tema que te gustaría aprender, no dudes en escribirme o contactarme mediante las redes.

Saludos!!

Sigue en mis redes sociales para más contenido

Did you find this article valuable?

Support Osvaldo González by becoming a sponsor. Any amount is appreciated!