daust / JasperReportsIntegration

JasperReportsIntegration provides an interface to use the JasperReports reporting engine in an Oracle database application, specifically with Oracle Application Express (Oracle APEX).
BSD 3-Clause "New" or "Revised" License
55 stars 23 forks source link

2 versions of Log4j dependences #126

Closed lomalick closed 1 year ago

lomalick commented 1 year ago

Hello.

I have downloaded the jri-2.10.0-jasper-6.20.0.zip from release. I followed instructions to install it on a linux server with tomcat 9. But I faced problems at startup time of jiri. I searched for erros and found the following stacktrace in localhost.log file java.lang.NoSuchMethodError: 'java.lang.ClassLoader org.apache.logging.log4j.util.StackLocatorUtil.getCallerClassLoader(int)' at org.apache.logging.log4j.core.config.Configurator.setLevel(Configurator.java:402) at de.oc.integration.jasper.webapp.AppServletContextListener.contextInitialized(AppServletContextListener.java:30) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4764) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5222) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1023) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1910) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:824) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1617) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:430) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:772) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) I saw also in folder /webapps/jri/WEB-INF/lib/ there are 2 versions of log4j classes.

As a workaround I deleted the following files and resatarted tomcat and the errors were resolved (no more exceptions on startup): log4j-api-2.17.1.jar log4j-core-2.17.1.jar log4j-jcl-2.17.1.jar

Can you please spot the root cause of duplicate log4j versions?

Kind regards

Here is some output from catalina.out with versions o f java, tomcat, jasperrports, ORDS ` 2023-01-12T15:48:54.923Z WARNING jdbc.MaxLimit dans la configuration |default|lo| utilise une valeur de 10, ce paramètre n'a peut-être pas la taille adéquate pour un environnement de production 2023-01-12T15:48:54.924Z WARNING jdbc.InitialLimit dans la configuration |default|lo| utilise une valeur de 3, ce paramètre n'a peut-être pas la taille adéquate pour un environnement de production 2023-01-12T15:48:55.476Z INFO Oracle REST Data Services initialized Oracle REST Data Services version : 22.2.0.r1721758 Oracle REST Data Services server info: Apache Tomcat/9.0.70 Oracle REST Data Services java info: OpenJDK 64-Bit Server VM 11.0.17+8-LTS

2023-01-12T15:48:55.497Z INFO Le déploiement de l'archive de l'application web [/opt/tomcat/apache-tomcat-9.0.70/webapps/ords.war] s'est terminé en [6 208] ms 2023-01-12T15:48:55.500Z INFO Déploiement de l'archive [/opt/tomcat/apache-tomcat-9.0.70/webapps/jri.war] de l'application web 2023-01-12T15:48:55.502Z WARNING La correspondance [Context] n'a pu fixer la propriété [debug] à [0] 2023-01-12T15:48:58.519Z INFO Au moins un fichier JAR a été analysé pour trouver des TLDs mais il n'en contenait pas, le mode "debug" du journal peut être activé pour obtenir une liste complète de JAR scannés sans succès ; éviter d'analyser des JARs inutilement peut améliorer sensiblement le temps de démarrage et le temps de compilation des JSPs 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - Settings from configuration file /opt/JasperReports/conf/application.properties: 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - application.configFileVersion=2.9.0 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - application.jndiPrefix=java:comp/env/jdbc/ 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - application.infoPageIsEnabled=true 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - application.reportsPath= 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - datasource:default.type=jdbc 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - datasource:default.url=jdbc:oracle:thin:@localhost:1521/pdberp 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - datasource:default.username=pafe 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - directPrinting.isEnabled=false 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - directPrinting.displayPrintDialog=false 15:48:58 [INFO] jasper.webapp.AppConfig.logApplicationProperties - saveFileOnServer.isEnabled=false 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - *** 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - * Initialize JasperReportsIntegration (jri) - START 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - The current configuration is loaded from: /opt/JasperReports 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Config-Directory: /opt/JasperReports/conf 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Config-File: /opt/JasperReports/conf/application.properties 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Reports-Path: /opt/JasperReports/conf/../reports 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Temp-Directory: /opt/tomcat/apache-tomcat-9.0.70/webapps/jri/report_tmp 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Logs-Directory: /opt/JasperReports/logs 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Java-Runtime-Version: 11.0.17 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - JasperReports-Version: 6.20.0-51a71b12f8db21cb011628dd221240da17b0feaa 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - Classpath: /opt/tomcat/latest/bin/bootstrap.jar, /opt/tomcat/latest/bin/tomcat-juli.jar 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - ipAddressesAllowed: 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - * Initialize JasperReportsIntegration (jri) - END 15:48:58 [INFO] jasper.webapp.AppConfig.initialize - *** `

daust commented 1 year ago

Great! Thank you for catching this.

Cause: Through the build.gradle file I will pick up the latest log4j libraries. But JasperReports includes it as well. The automatic removal of the older libraries from JasperReports didn't pick up this version.

I fixed it now to be more generic. Thank you again.

Interestingly enough, this doesn't cause any issues in my test environment on Windows.