[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16764206#comment-16764206 ] Donald Kwakkel commented on TOMEE-2458: --- [~romain.manni-bucau]: Thanks, extension is working. > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myclassloader.jar.withtccl, > myexception.jar, myexception.jar.withbean, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772) > at > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) > at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585) > at > org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) > at > org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424) > at > org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:367) >
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16751105#comment-16751105 ] Romain Manni-Bucau commented on TOMEE-2458: --- [~dkwakkel] this extension https://github.com/apache/tomee/blob/master/container/openejb-core/src/main/java/org/apache/openejb/classloader/ClassLoaderConfigurer.java > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myclassloader.jar.withtccl, > myexception.jar, myexception.jar.withbean, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772) > at > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) > at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585) > at > org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) > at >
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16751078#comment-16751078 ] Donald Kwakkel commented on TOMEE-2458: --- [~romain.manni-bucau]: What do you mean with ' openejb classloader customizer'? > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myclassloader.jar.withtccl, > myexception.jar, myexception.jar.withbean, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772) > at > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) > at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585) > at > org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) > at > org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424) > at >
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16750973#comment-16750973 ] Roberto Cortez commented on TOMEE-2458: --- [~dkwakkel] I believe [~romain.manni-bucau] is right. The problem here is that some of the MP libs require Bean injection on their Extensions. So, the Extension is loading, but their CDI beans are not, hence you get that weird NPE. Most likely, the CDI Extensions are being loaded by one class loader and their beans scanning by another loader, or not even scanned at all. Can you have a look here org.apache.openejb.config.DeploymentLoader#addBeansXmls(org.apache.openejb.config.WebModule). This is where the url list of jars is obtained to perform CDI scanning for beans. So, it needs to return all the MP libs in here. > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myclassloader.jar.withtccl, > myexception.jar, myexception.jar.withbean, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at >
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16750877#comment-16750877 ] Romain Manni-Bucau commented on TOMEE-2458: --- [~dkwakkel] nop, this does not look the same issue like that. ParentClassLoader must be openejb classloader and never the TCCL of an app (it must not be able to load any app class to be concrete but only server libs except when all are in the same flat classloader). Here the issue is that the scanned loader does not match your custom loader strategy since we just respect webapp strategies. Using WEB-INF/jars.txt or openejb classloader customizer would work since the scanning and runtime will them use the same list of jars. > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myclassloader.jar.withtccl, > myexception.jar, myexception.jar.withbean, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772) > at >
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16750833#comment-16750833 ] Donald Kwakkel commented on TOMEE-2458: --- I found a similair issue about tccl not used here: TOMEE-877. [~romain.manni-bucau] is this the same issue? > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myclassloader.jar.withtccl, > myexception.jar, myexception.jar.withbean, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772) > at > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) > at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585) > at > org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) > at > org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424) > at >
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16750449#comment-16750449 ] Donald Kwakkel commented on TOMEE-2458: --- When adding above line to MyClassLoader [^myclassloader.jar.withtccl] : {code} package test; import java.net.URL; import java.net.URLClassLoader; import org.apache.catalina.loader.WebappClassLoader; public class MyClassLoader extends WebappClassLoader { public MyClassLoader(ClassLoader parent) throws java.net.MalformedURLException { super(parent); addURL(java.nio.file.Paths.get(System.getProperty("catalina.home"), "myexception.jar").toUri().toURL()); org.apache.openejb.loader.SystemInstance.get().setComponent(org.apache.openejb.core.ParentClassLoaderFinder.class, fallback -> java.lang.Thread.currentThread().getContextClassLoader()); } private static URL[] getURLss(){ try { return new URL[]{new URL("file:///C:/Program%20Files/TomEE/myexception.jar")}; } catch(Exception e) { throw new RuntimeException(e); } } } {code} and adding a bean to the myexception.jar which is loaded through this classloader [^myexception.jar.withbean]: {code} package test; import static javax.ejb.TransactionAttributeType.SUPPORTS; import java.util.function.Supplier; import javax.ejb.LocalBean; import javax.ejb.Singleton; import javax.ejb.TransactionAttribute; import javax.xml.ws.Provider; @Singleton(name = "PlatformContextBean") @LocalBean public class PlatformContextBean> implements Provider { @SuppressWarnings("unchecked") @Override @TransactionAttribute(SUPPORTS) public T invoke(T request) { Object result = request.get(); return (T) (Supplier) () -> result; } } {code} I get the following exception from Micro Profile: {code} at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:367) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:969) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) 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:140) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:682) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:241) Caused by: org.apache.webbeans.exception.WebBeansException: java.lang.NullPointerException: bean parameter may not be null at org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:371) at org.apache.webbeans.event.NotificationManager.invokeObserverMethod(NotificationManager.java:818) at
[jira] [Commented] (TOMEE-2458) Loading Beans causes ClassNotFoundException when using custom context classloader
[ https://issues.apache.org/jira/browse/TOMEE-2458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16750313#comment-16750313 ] Donald Kwakkel commented on TOMEE-2458: --- When adding following in MyClassLoader it is working: {code:java} SystemInstance.get().setComponent(ParentClassLoaderFinder.class, fallback -> Thread.currentThread().getContextClassLoader()); {code} I would expect ParentClassLoaderFinder returns tccl by default. > Loading Beans causes ClassNotFoundException when using custom context > classloader > - > > Key: TOMEE-2458 > URL: https://issues.apache.org/jira/browse/TOMEE-2458 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server >Affects Versions: 8.0.0-M1 >Reporter: Gerwin >Priority: Major > Attachments: myclassloader.jar, myexception.jar, repro.war > > > h4. Steps to reproduce > # Create a custom Exception and put it in {{CATALINA_HOME/myexception.jar}} > {code:java} > public class MyException extends Exception { > } > {code} > # Create a custom ClassLoader and put it in > {{CATALINA_HOME/myclassloader.jar}} > {code:java} > public class MyClassLoader extends WebappClassLoader { > public MyClassLoader(ClassLoader parent)throws MalformedURLException { > super(parent); > addURL(Paths.get(System.getProperty("catalina.home"), > "myexception.jar").toUri().toURL()); > } > } > {code} > # Put the classloader on the classpath > {code:none|title=CATALINA_HOME/conf/catalina.properties} > common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/myclassloader.jar" > {code} > # Use the classloader in the context > {code:xml|title=CATALINA_HOME/webapps/repro/META-INF/context.xml} > > > > {code} > # Create a bean with the {{MyException}} in the method signature > {code:java|title=CATALINA_HOME/webapps/repro/WEB-INF/classes/MyBean.class} > @Stateless(name = "MyBeanEJB") > public class MyBean { > public String hello() throws MyException { > return "hello"; > } > } > {code} > # Use the bean > {code:java|title=CATALINA_HOME/webapps/repro/index.jsp} > <%@ page import="MyBean" %> > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <% > MyBean myBean = new MyBean(); > out.println(myBean.hello()); > %> > > > {code} > h4. Actual result > {code:none|title=CATALINA_HOME/logs/catalina.0.log} > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/9.0.12 (8.0.0-SNAPSHOT) > jan 23, 2019 4:37:17 PM sun.reflect.DelegatingMethodAccessorImpl invoke > INFO: Deploying web application archive [C:\Program > Files\TomEE\webapps\repro.war] > jan 23, 2019 4:37:17 PM org.apache.tomee.catalina.TomcatWebAppBuilder init > INFO: - localhost -> /repro > jan 23, 2019 4:37:17 PM org.apache.openejb.config.ConfigurationFactory > configureApplication > INFO: Configuring enterprise application: C:\Program Files\TomEE\webapps\repro > jan 23, 2019 4:37:17 PM sun.reflect.NativeMethodAccessorImpl invoke > SEVERE: ContainerBase.addChild: start: > org.apache.catalina.LifecycleException: Failed to start component > [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/repro]] > at > org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) > at > org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) > at > java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772) > at > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) > at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585) > at > org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) > at >