jetty.project
jetty.project copied to clipboard
Having trouble setting up custom Weld on jetty12
Latest jetty12 build with ee9 or ee10
JDK 17.
I can see that jetty12 has CDI modules and we probably could enable those to get jettys internal weld CDI working, but for the purpose for this question I would no enable those modules.
I have a standalone weld 4 war (but I had the same issue also with weld 5.1), that is working in jetty11. The war contains all the files and APIs needed for weld. Looking at code I can see that it uses ServiceLoader (from jakarta.enterprise.inject.spi.CDI) to find out it's provided CDI implementation. I can see that the service interface is loaded from the application: 'jar:file:/C:/work/servers/jetty-home-11.0.12/webapps/exp-weld40-beanClassAdd/WEB-INF/lib/jakarta.enterprise.cdi-api-3.0.0.jar!/jakarta/enterprise/inject/spi/CDIProvider.class'. And now it finds the implementation from WEB-INF/lib/weld-servlet-core-4.0.3.Final.jar Now when I deployed the same application on weld12ee9 (also the same on weld12ee10) I can see that the interface is found from: file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jakarta.enterprise.cdi-api-3.0.1.jar!/jakarta/enterprise/inject/spi/CDIProvider.class And later on the implementation from weld-servlet-core-4.0.3.Final.jar is not found. The jar WEB-INF/lib/jakarta.enterprise.cdi-api-3.0.0.jar also exists, but CDIProvider is found from the server and for some reason, it does not find the implementation provided by the application.
I digged a little deeper and found out that the classpath has changed: jetty11:
org.eclipse.jetty.start.Classpath$Loader@150fc7a7 URLs: [file:/C:/work/servers/jetty-home-11.0.12/resources/,
file:/C:/work/servers/jetty-home-11.0.12/lib/logging/slf4j-api-2.0.0.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/logging/jetty-slf4j-impl-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-jakarta-servlet-api-5.0.2.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-http-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-server-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-xml-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-util-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-io-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-jndi-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-security-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-servlet-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-webapp-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-plus-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jakarta.transaction-api-2.0.0.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-annotations-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/annotations/asm-9.3.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/annotations/asm-analysis-9.3.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/annotations/asm-commons-9.3.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/annotations/asm-tree-9.3.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/annotations/jakarta.annotation-api-2.1.1.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/apache-jsp/org.eclipse.jdt.ecj-3.27.0.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/apache-jsp/org.eclipse.jetty.apache-jsp-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/apache-jsp/org.mortbay.jasper.apache-el-10.0.14.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/apache-jsp/org.mortbay.jasper.apache-jsp-10.0.14.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-client-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-alpn-client-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/jetty-deploy-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-core-common-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-core-client-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-core-server-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-servlet-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/jetty-jakarta-websocket-api-2.0.0.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-jakarta-client-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-jakarta-common-11.0.12.jar,
file:/C:/work/servers/jetty-home-11.0.12/lib/websocket/websocket-jakarta-server-11.0.12.jar]
jetty12
2023-07-26 09:14:30.285 INFO [0] [Core] java.net.URLClassLoader@893081e URLs: [
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-jakarta-servlet-api-5.0.2.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-nested-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-servlet-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-security-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-webapp-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-plus-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jakarta.transaction-api-2.0.1.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jakarta.interceptor-api-2.0.1.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jakarta.enterprise.cdi-api-3.0.1.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jakarta.inject-api-2.0.1.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-annotations-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-annotations/asm-9.5.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-annotations/asm-analysis-9.5.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-annotations/asm-commons-9.5.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-annotations/asm-tree-9.5.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-annotations/jakarta.annotation-api-2.0.0.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-apache-jsp/org.eclipse.jdt.ecj-3.27.0.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-apache-jsp/org.mortbay.jasper.apache-el-10.0.14.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-apache-jsp/org.mortbay.jasper.apache-jsp-10.0.14.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-ee9-apache-jsp-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-glassfish-jstl/jakarta.servlet.jsp.jstl.jakarta.servlet.jsp.jstl-api-2.0.0.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-glassfish-jstl/org.glassfish.web.jakarta.servlet.jsp.jstl-2.0.0.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-websocket-core-common-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-websocket-core-client-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/jetty-websocket-core-server-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-servlet-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-jakarta-websocket-api-2.0.0.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-jakarta-client-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-jakarta-common-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-jakarta-server-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-jetty-api-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-jetty-common-12.0.0-SNAPSHOT.jar,
file:/C:/work/servers/jetty-home-12.0.0-SNAPSHOT/lib/ee9-websocket/jetty-ee9-websocket-jetty-server-12.0.0-SNAPSHOT.jar]
Jetty 11 did not have jakarta.enterprise.cdi-api-3.0.1.jar on server classpath. Is it there by design? I have not enabled any CDI modules in my knowledge:
Enabled Modules:
----------------
0) resources ${jetty.base}\start.d\resources.ini
1) logging/slf4j transitive provider of logging/slf4j for logging-jetty
dynamic dependency of logging-jetty
2) logging-jetty transitive provider of logging for threadpool
transitive provider of logging for bytebufferpool
transitive provider of logging for server
3) bytebufferpool transitive provider of bytebufferpool for server
ini template available with --add-modules=bytebufferpool
4) client ${jetty.base}\start.d\client.ini
5) threadpool transitive provider of threadpool for server
ini template available with --add-modules=threadpool
6) server ${jetty.base}\start.d\server.ini
7) deploy ${jetty.base}\start.d\deploy.ini
8) sessions transitive provider of sessions for ee9-servlet
ini template available with --add-modules=sessions
9) ee9-servlet transitive provider of ee9-servlet for ee9-security
transitive provider of ee9-servlet for ee9-apache-jsp
transitive provider of ee9-servlet for ee9-webapp
transitive provider of ee9-servlet for ee9-jsp
10) security transitive provider of security for ee9-security
11) ee9-security transitive provider of ee9-security for ee9-plus
transitive provider of ee9-security for ee9-webapp
12) ee9-webapp transitive provider of ee9-webapp for ee9-plus
transitive provider of ee9-webapp for ee9-deploy
ini template available with --add-modules=ee9-webapp
13) jndi transitive provider of jndi for ee9-plus
14) ee9-plus transitive provider of ee9-plus for ee9-annotations
15) ee9-annotations transitive provider of ee9-annotations for ee9-websocket-jakarta
transitive provider of ee9-annotations for ee9-apache-jsp
transitive provider of ee9-annotations for ee9-jsp
16) ee9-apache-jsp transitive provider of ee9-apache-jsp for ee9-jsp
17) ee9-deploy ${jetty.base}\start.d\ee9-deploy.ini
18) ee9-glassfish-jstl transitive provider of ee9-glassfish-jstl for ee9-jstl
19) ee9-jsp ${jetty.base}\start.d\ee9-jsp.ini
20) ee9-jstl ${jetty.base}\start.d\ee9-jstl.ini
21) ee9-websocket-jakarta ${jetty.base}\start.d\ee9-websocket-jakarta.ini
22) http ${jetty.base}\start.d\http.ini
Are there any suggestions in order to get the service loader working again? Maybe I can turn the application into child-first classloading somehow in order to get it working? Can I remove the jar from servers classpath somehow? Or if the interface is in the servers classpath, it should still find the implementation in the application..