[ https://issues.apache.org/jira/browse/TOMEE-4485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18011454#comment-18011454 ]
Richard Zowalla commented on TOMEE-4485: ---------------------------------------- Yes. The commit was reverted. Details are on the mailing list. > Context ClassLoader becomes null for EJB timer threads in TomEE 10 > ------------------------------------------------------------------ > > Key: TOMEE-4485 > URL: https://issues.apache.org/jira/browse/TOMEE-4485 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server > Affects Versions: 10.0.1 > Environment: TomEE 10.0.1 running on JRE 21 (Temurin 21.0.6+7) in > Docker container (Ubuntu based). Hibernate 6.6.13 is used instead of OpenJPA. > Reporter: Frédéric Hannes > Priority: Major > > We've been working on migrating our applications from Java EE to Jakarta EE. > The applications run without any issues on TomEE 8 with Java EE and TomEE 9 > with Jakarta EE. But when upgrading to TomEE 10 we notice that errors start > occurring after a few JNDI lookups in a thread from the EjbTimerPool. Since > we don't experience any issues on TomEE 9, I suspect it may be a bug that was > introduced in TomEE 10. > It is still unclear to us what is the underlying cause of the problem and > what component it pertains to, as the exception cause is in code of the > Tomcat server, but the thread is managed by OpenEJB. Since the error occurred > when upgrading to TomEE 10, I've logged it under TomEE, but please move the > issue if needed. > The cause of the exception is a JNDI lookup that fails. In the > {{ContextBindingsisClassLoaderBound()}} method in Tomcat, the context > classloader of the thread is used as the key for a map. At some point the > classloader of these threads in the EjbTimerPool become {{null}} and as a > result we get back this {{NullPointerException}} when it tries to use it as > the key for the map. > {code:java} > application-1 | Caused by: java.lang.NullPointerException: Cannot invoke > "Object.hashCode()" because "<parameter1>" is null > application-1 | at > java.base/java.util.concurrent.ConcurrentHashMap.get(Unknown Source) > application-1 | at > java.base/java.util.concurrent.ConcurrentHashMap.containsKey(Unknown Source) > application-1 | at > org.apache.naming.ContextBindings.isClassLoaderBound(ContextBindings.java:302) > application-1 | at > org.apache.naming.SelectorContext.getBoundContext(SelectorContext.java:390) > application-1 | at > org.apache.naming.SelectorContext.lookup(SelectorContext.java:144) > application-1 | at > java.naming/javax.naming.InitialContext.lookup(Unknown Source) > application-1 | at com.example.c.e.lookupNamedObject(e.java:54) > application-1 | at com.example.a.c.a(c.java:51) > application-1 | ... 23 more > {code} > I've not been able to pinpoint what causes the classloader to be set to > {{null}} and I've not found anything in migration guides, release notes or > commits that have given me much more insight into the issue so far. I am not > familiar enough with the entire codebase of the TomEE ecosystem itself to > efficiently diagnose the issue. But I will update this ticket if I find out > anything more. -- This message was sent by Atlassian Jira (v8.20.10#820010)