[
https://issues.apache.org/jira/browse/TOMEE-4485?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Frédéric Hannes updated TOMEE-4485:
-----------------------------------
Summary: Context ClassLoader becomes null for EJB timer threads in TomEE 10
(was: ContextClassLoader becomes null for timer threads in TomEE 10)
> 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)