Problemas con Jasper en producción

Buen día, estamos teniendo problemas con todos los Jasper en GESTION. Versionamos de la 3.18.0 a la 3.20.1, con cambio de S.O. a Debian 11 (bullseye).
LLega un momento que la generación de los pdf, empieza a hacer que sea imposible trabajar por lo lento y es con todos.

Estuve mirando este foro: https://foro.comunidad.siu.edu.ar/index.php?topic=23041.msg104035, que tenía problemas con Autogestión.
Además de la configuración https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/configuracion-jasper, ¿se requiere algún otro cambio?

El script de ejecución tiene: java -jar /usr/local/proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 > /tmp/jasper 2>&1

En el log sólo hay warning:
Jun 24 09:48:34 JavaBridge INFO : VM : 11.0.15@https://tracker.debian.org/openjdk-11
Jun 24 09:48:34 JavaBridge INFO : JavaBridge version : 7.2.1
Jun 24 09:48:34 JavaBridge INFO : logFile :
Jun 24 09:48:34 JavaBridge INFO : default logLevel : 3
Jun 24 09:48:34 JavaBridge INFO : socket : SERVLET_LOCAL:8081
Jun 24 09:48:34 JavaBridge INFO : java.ext.dirs : null
Jun 24 09:48:34 JavaBridge INFO : php.java.bridge.base: /root
Jun 24 09:48:34 JavaBridge INFO : thread pool size : 20
Jun 24 09:48:34 JavaBridge INFO : JavaBridgeRunner started on port INET_LOCAL:8081
log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
log4j:WARN Please initialize the log4j system properly.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass$3$1 (file:/usr/local/proyectos/guarani/vendor/siu-toba/jasper/JasperReports/groovy-all-2.0.1.j>
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass$3$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Lo raro es que es general, y la máquina no se queda sin recursos.

Gracias por su tiempo.

Hola Ana,

Proba corriendo dos instancias de Jasper una en el puerto 8081 y otra en el 8082, hace que Gestión apunte al del puerto 8081 y Autogestión al del puerto 8082 (ver: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/configuracion-jasper).

Si con eso no funciona proba dándole permisos al directorio /dev/shm (ver: https://foro.comunidad.siu.edu.ar/index.php?topic=21870.msg97734).

El Jasper ejecutalo con el nivel de debug 5 así da mas información (ver: https://foro.comunidad.siu.edu.ar/index.php?topic=23079.msg104967):

Gestión:

java -Duser.language=es -Duser.country=AR -Djava.awt.headless=true -jar /path/to/gestion/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 5

Autogestión:

java -Duser.language=es -Duser.country=AR -Djava.awt.headless=true -jar /path/to/autogestion/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8082 5

saludos.
4

Leonel:
No necesito dos instancias del Jasper, porque el servidor sólo tiene la aplicación de GESTION. El G3W lo tenemos en otro servidor, y no se han reportado inconvenientes. Pero lo ejecuto a nivel 5 recolectar más información. De todas formas no es algo que suceda siempre, por eso es complicado de detectar.

Perfecto Ana, ni bien se cuelgue y te genere el error de los logs nos los pasas!!!

También podes probar borrando la carpeta vendor y volves a descargar las dependencias con el comando composer install.

Revisa que los archivos vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar, vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/php-servlet.jar y vendor/siu-toba/jasper/JavaBridge/java/Java.inc queden reemplazados por los que están en var/JavaBridge.jar, var/php-servlet.jar y var/Java.inc. Luego reinicias el servidor de Jasper.

saludos.
2

Leonel:
Entre hoy y ayer ya nos ha pasado dos veces en que tuve que bajar y subir el jasper en gestión.
Te paso el log:
Jul 08 10:21:38 JavaBridge INFO : VM : 11.0.15@https://tracker.debian.org/openjdk-11
Jul 08 10:21:38 JavaBridge INFO : JavaBridge version : 7.2.1
Jul 08 10:21:38 JavaBridge INFO : logFile :
Jul 08 10:21:38 JavaBridge INFO : default logLevel : 3
Jul 08 10:21:38 JavaBridge INFO : socket : SERVLET_LOCAL:8081
Jul 08 10:21:38 JavaBridge INFO : java.ext.dirs : null
Jul 08 10:21:38 JavaBridge INFO : php.java.bridge.base: /root
Jul 08 10:21:38 JavaBridge INFO : thread pool size : 20
Jul 08 10:21:38 JavaBridge INFO : JavaBridgeRunner started on port INET_LOCAL:8081
log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass$3$1 (file:/usr/local/proyectos/guarani/vendor/siu-toba/jasper/JasperReports/groovy-all-2.0.1.jar)>
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass$3$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Los archivos que me decis son los mismos:
-rw-r–r-- 1 root root 438139 abr 20 12:30 /usr/local/proyectos/guarani/var/JavaBridge.jar
-rw-r–r-- 1 root root 438139 abr 20 12:51 /usr/local/proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar

-rw-r–r-- 1 root root 56079 abr 20 12:30 /usr/local/proyectos/guarani/var/php-servlet.jar
-rw-r–r-- 1 root root 56079 abr 20 12:51 /usr/local/proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/php-servlet.jar

-rw-r–r-- 1 root root 63448 abr 20 12:30 /usr/local/proyectos/guarani/var/Java.inc
-rw-r–r-- 1 root root 63448 abr 20 12:51 /usr/local/proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc

Pero lo que no hice fué eliminar el vendor y volver hacer un composer install. Si es necesario lo hago, pero estan generando actas por eso no quise hacerlo.

Otra info es que el proceso padre de Jasper dice estar corriendo hace 2hs.

Gracias por tu tiempo.

Hola Ana,

Revisa el foro 23833, las respuestas 11 y 12 mas que nada.

saludos.
2

Leonel:
Entonces los pasos serían:

  1. En composer.json cambia a “siu-toba/jasper”: “5.6.1”,

  2. Ejecuta composer update siu-toba/jasper

  3. En php.ini NO configures la directiva java.pipe_dir.

  4. Dar permisos a la carpeta /dev/shm (yo le di chmod 7777 -R /dev/shm).

  5. Poner la directiva display_errors = Off en el php.ini, ya que sino mete warnings/notices en el PDF y queda corrupto.

  6. Reiniciar Apache.

  7. Reinicia Jasper.

    Pruebo eso. Gracias

Leonel:
Hice los pasos que te pasé anteriormente, y sigo teniendo el mismo problema.
Lo único que me faltaría probar sería borrar el vendor y hacer composer install completo, pero no sé si tiene sentido me parece.
Te paso la salida del composer:
composer update siu-toba/jasper
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals

  • Downgrading siu-toba/jasper (dev-master 05817c1 => v5.6.1)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 0 installs, 1 update, 0 removals
  • Downgrading siu-toba/jasper (dev-master 05817c1 => v5.6.1): Extracting archive
    Package chrisboulton/php-resque is abandoned, you should avoid using it. Use resque/php-resque instead.
    Package container-interop/container-interop is abandoned, you should avoid using it. Use psr/container instead.
    Package dapphp/securimage is abandoned, you should avoid using it. No replacement was suggested.
    Package guiguiboy/php-cli-progress-bar is abandoned, you should avoid using it. No replacement was suggested.
    Package siu-toba/jasper is abandoned, you should avoid using it. No replacement was suggested.
    Generating autoload files
    30 packages you are using are looking for funding.
    Use the composer fund command to find out more!

composer run-script post-install-cmd -d ./vendor/siu-toba/framework/
Do not run Composer as root/super user! See How do I install untrusted packages safely? Is it safe to run Composer as superuser or root? - Composer for details
Continue as root/super user [yes]? yes
yarn add ckeditor4@4.16 jquery@3.6 jquery-migrate@3.3 siu-js-app-launcher@1.0.6 --modules-folder www/js/packages/
yarn add v1.22.18
[1/4] Resolving packages…
[2/4] Fetching packages…
[3/4] Linking dependencies…
[4/4] Building fresh packages…
warning Your current version of Yarn is out of date. The latest version is “1.22.19”, while you’re on “1.22.18”.
info To upgrade, run the following command:
$ sudo apt-get update && sudo apt-get install yarn
success Saved 0 new dependencies.
Done in 13.31s.
yarn
yarn install v1.22.18
[1/4] Resolving packages…
success Already up-to-date.
Done in 0.18s.
php bin/instalar_assets.php
Copiando assets actualizados …

Hola Ana,

Si, esta bien la salida del comando composer update siu-toba/jasper.

Me olvide de decirte algo, en el archivo src/SIU/Guarani/Scripts/Composer.php tenes que comentar las lineas 14 y 22 que dicen static::ajustarJasperPhp74();.

Una vez comentadas esas dos lineas podes hacer dichos pasos del mensaje anterior:

  1. En composer.json cambia a “siu-toba/jasper”: “5.6.1”,
  2. Ejecuta composer update siu-toba/jasper
  3. En php.ini configurar la directiva java.pipe_dir a un directorio temporal con permisos de escritura (revisar como queda la variable de entorno JAVA_PIPE_DIR). Si modificando la directiva java.pipe_dir no funciona entonces dar permisos a la carpeta /dev/shm (yo le di chmod 7777 -R /dev/shm).
  4. Poner la directiva display_errors = Off en el php.ini, ya que sino mete warnings/notices en el PDF y queda corrupto.
  5. Reiniciar Apache.
  6. Reinicia Jasper.

Contame si con eso se soluciona!!!

Esto lo estamos viendo con el resto de los módulos del SIU en la issue 205.

saludos.
2

Leonel:
No tengo la directiva java.pipe_dir en el php.ini. Le dí permiso de a la carpeta /dev/shm. ¿Conviene agregarla?

Hola Ana,

Si, la agregas de la siguiente forma en el php.ini:

java.pipe_dir=/usr/local/app/temp

Debe apuntar a un directorio con permisos de escritura y lectura.

Si la directiva java.pipe_dir no esta definida toma por defecto la carpeta /dev/shm.

Ver https://github.com/SIU-Toba/jasper/blob/v5.6.1/JavaBridge/java/Java.inc#L134

saludos.

Se sigue en GDS 59220.