DHIS2 patch release 41.0.1 is now available - HOTFIX

Dear all,

DHIS2 version 41.0.1 is out as a HOTFIX release to address critical functional issues in v41.

  • DHIS2-17612: Regression in OAuth configuration
  • DHIS2-17581: Back-end service worker caching on bundled apps breaks app overrides

This is the latest stable release for version 41, and supersedes release 41.0.0.

These hotfixes are provided to make it easy for you to keep your system secure and reliable; provided you keep up to date with the latest patch versions.

The release note for this patch can be found here: Patch 41.0.1 Release Note.

Thanks!

DHIS2 Release Team

Release Information Links
Release Note Patch 41.0.1 Release Note
Upgrade notes 2.41 Upgrade notes
Download release and sample database Downloads - DHIS2
Documentation Home - DHIS2 Documentation
Source code on Github tag/2.41.0.1
Demo instance Login app | DHIS2
Docker docker pull dhis2/core:41.0.1
for more docker image variants see dockerhub
3 Likes

Hey there.

I was running version 40 and I have been unsuccessful in upgrading the version to 41. I have tried running this both on a linux instance and both times it has failed. I canā€™t tell much from the logs but I can try again and see.

What would be causing the issue and how do I fix this?

Additionally, since I ran the update and failed, I reverted to version 40 and everything went alright and it deployed. However, since then (yesterday) I have been getting 502 Bad Gateway error and nothing on the log files when it goes down. The fix is to restart tomcat though it only stays up for a few hours and then comes down again.

I have an analytics table update running at 1am and there were errors on the analytics table generation the day after the failed update that there werenā€™t the day before the failed update.

Seeking advice on the way forward, thank you.

1 Like

@lillian1n2 sorry to hear about this issue, have you managed to fix this? Please feel free to start a new topic with the complete Catalina.out log (without sensitive/authentication info)

Thank you!

Yes I did, however, I now have a new problem. This consistently shows up un the logs and I noticed some users cannot login with username and password anymore


 ERROR 2024-07-12T11:10:00,001 Exceptions thrown in scheduler loop (JobScheduler.java [pool-5-thread-1])
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: EntityManagerFactory is closed
        at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:467) ~[spring-orm-5.3.33.jar:5.3.33]
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) ~[spring-tx-5.3.33.jar:5.3.33]
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) ~[spring-tx-5.3.33.jar:5.3.33]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:595) ~[spring-tx-5.3.33.jar:5.3.33]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:382) ~[spring-tx-5.3.33.jar:5.3.33]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.33.jar:5.3.33]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.33.jar:5.3.33]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:241) ~[spring-aop-5.3.33.jar:5.3.33]
        at jdk.proxy3/jdk.proxy3.$Proxy438.getDueJobConfigurations(Unknown Source) ~[?:?]
        at org.hisp.dhis.scheduling.JobScheduler.run(JobScheduler.java:126) [dhis-service-core-2.41.0.1.jar:?]
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
        at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.lang.IllegalStateException: EntityManagerFactory is closed
        at org.hibernate.internal.SessionFactoryImpl.validateNotClosed(SessionFactoryImpl.java:547) ~[hibernate-core-5.6.15.Final.jar:5.6.15.Final]
        at org.hibernate.internal.SessionFactoryImpl.createEntityManager(SessionFactoryImpl.java:636) ~[hibernate-core-5.6.15.Final.jar:5.6.15.Final]
        at org.hibernate.internal.SessionFactoryImpl.createEntityManager(SessionFactoryImpl.java:158) ~[hibernate-core-5.6.15.Final.jar:5.6.15.Final]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.createNativeEntityManager(AbstractEntityManagerFactoryBean.java:585) ~[spring-orm-5.3.33.jar:5.3.33]
        at jdk.internal.reflect.GeneratedMethodAccessor170.invoke(Unknown Source) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:487) ~[spring-orm-5.3.33.jar:5.3.33]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:734) ~[spring-orm-5.3.33.jar:5.3.33]
        at jdk.proxy3/jdk.proxy3.$Proxy148.createNativeEntityManager(Unknown Source) ~[?:?]
        at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:485) ~[spring-orm-5.3.33.jar:5.3.33]
        at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:410) ~[spring-orm-5.3.33.jar:5.3.33]
<6>Illegal access: this web application instance has been stopped already. Could not load [org.hibernate.internal.SessionFactoryImpl]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
<6>java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [org.hibernate.internal.SessionFactoryImpl]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
<6>    at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)
<6>    at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1373)
<6>    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1226)
<6>    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
<6>    at org.apache.logging.log4j.core.impl.ThrowableProxyHelper.loadClass(ThrowableProxyHelper.java:204)
<6>    at org.apache.logging.log4j.core.impl.ThrowableProxyHelper.toExtendedStackTrace(ThrowableProxyHelper.java:112)
<6>    at org.apache.logging.log4j.core.impl.ThrowableProxy.<init>(ThrowableProxy.java:144)
<6>    at org.apache.logging.log4j.core.impl.ThrowableProxy.<init>(ThrowableProxy.java:118)
<6>    at org.apache.logging.log4j.core.impl.ThrowableProxy.<init>(ThrowableProxy.java:96)
<6>    at org.apache.logging.log4j.core.impl.Log4jLogEvent.getThrownProxy(Log4jLogEvent.java:818)
<6>    at org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter.format(ExtendedThrowablePatternConverter.java:63)
<6>    at org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:44)
<6>    at org.apache.logging.log4j.core.layout.PatternLayout$PatternFormatterPatternSerializer.toSerializable(PatternLayout.java:397)
<6>    at org.apache.logging.log4j.core.layout.PatternLayout.toText(PatternLayout.java:252)
<6>    at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:238)
<6>    at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:58)
<6>    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:227)
<6>    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:220)
<6>    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:211)
<6>    at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:160)
<6>    at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:133)
<6>    at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:124)
<6>    at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:88)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:705)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:663)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:639)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:696)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:665)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:639)
<6>    at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:575)
<6>    at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:92)
<6>    at org.apache.logging.log4j.core.Logger.log(Logger.java:169)
<6>    at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2906)
<6>    at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2859)
<6>    at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2841)
<6>    at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2620)
<6>    at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:2567)
<6>    at org.apache.logging.slf4j.Log4jLogger.error(Log4jLogger.java:313)
<6>    at org.hisp.dhis.scheduling.JobScheduler.run(JobScheduler.java:135)
<6>    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
<6>    at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
<6>    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
<6>    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
<6>    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
<6>    at java.base/java.lang.Thread.run(Thread.java:840)
<6>

Also, what happens with usernames that I could previously create with ā€˜Firstname Lastnameā€™? As it seems I can only create them as ā€˜Firstname_Lastnameā€™ now.