Hi,
I’m hitting the wall with this one and couldn’t find any help on the Web. When
I try to launch my web app from within Eclipse (Version: 2023-06 4.28.0) in the
Tomee (version 9.1 that uses Tomcat 10.0), I get the following loading error:
== start quote
July 24, 2023 10:39:08 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of
class [org.apache.myfaces.webapp.StartupServletContextListener]
java.lang.LinkageError: loader constraint violation for class
org.apache.tomee.myfaces.TomEEWebConfigProvider: when selecting overriding
method 'java.util.List
org.apache.tomee.myfaces.TomEEWebConfigProvider.getFacesServletMappings(jakarta.faces.context.ExternalContext)'
the class loader org.apache.tomee.catalina.TomEEWebappClassLoader @2e5b7fba of
the selected method's type org.apache.tomee.myfaces.TomEEWebConfigProvider, and
the class loader java.net.URLClassLoader @7106e68e for its super type
org.apache.myfaces.spi.impl.DefaultWebConfigProvider have different Class
objects for the type jakarta.faces.context.ExternalContext used in the
signature (org.apache.tomee.myfaces.TomEEWebConfigProvider is in unnamed module
of loader org.apache.tomee.catalina.TomEEWebappClassLoader @2e5b7fba, parent
loader java.net.URLClassLoader @7106e68e;
org.apache.myfaces.spi.impl.DefaultWebConfigProvider is in unnamed module of
loader java.net.URLClassLoader @7106e68e, parent loader 'app')
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at
java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3373)
at java.base/java.lang.Class.getConstructor0(Class.java:3578)
at java.base/java.lang.Class.getConstructor(Class.java:2271)
at
org.apache.myfaces.shared.util.ClassUtils.buildApplicationObject(ClassUtils.java:602)
at
org.apache.myfaces.shared.util.ClassUtils.buildApplicationObject(ClassUtils.java:534)
at
org.apache.myfaces.spi.impl.DefaultWebConfigProviderFactory.resolveWebXmlProviderFromService(DefaultWebConfigProviderFactory.java:129)
at
org.apache.myfaces.spi.impl.DefaultWebConfigProviderFactory.getWebConfigProvider(DefaultWebConfigProviderFactory.java:82)
at
org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:161)
at
org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:103)
at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4716)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5180)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
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:145)
at
org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
at
org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:886)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
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:145)
at
org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
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:432)
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:795)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
July 24, 2023 10:39:08 AM jdk.internal.reflect.NativeMethodAccessorImpl invoke
SEVERE: One or more listeners failed to start. Full details will be found in
the appropriate container log file
== end quote
I searched through JAR files, both those installed with my web app and those
provided by Tomee, and the problem class,
jakarta.faces.context.ExternalContext, appears only in myfaces-api-3.0.2.jar,
and this one is defined as a Maven dependency:
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>3.0.2</version>
<scope>provided</scope>
</dependency>
In the project’s pom.xml file. I wrote a script that was looking for the
problem class in all JARs, my web app’s and tomee jars, but only one instance
where that class is defined was found. For this reason, I find the message very
puzzling, because it appears to indicate that there’s more than one definition,
found by different class loaders, so I’m lost here about where to look for the
problem.
Any help would be greatly appreciated.
Thanks,
Milan