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