jetty.project icon indicating copy to clipboard operation
jetty.project copied to clipboard

Having trouble setting up custom Weld on jetty12

Open andresluuk opened this issue 1 year ago • 25 comments

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..

andresluuk avatar Jul 26 '23 06:07 andresluuk