Nov 09, 2013 2:49:31 PM org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context initialized event to listener instance of class org.apache.webbeans.servlet.WebBeansConfigurationListener java.lang.NullPointerException at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.afterStartApplication(WebContainerLifecycle.java:125) at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:132) at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:89) at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:85) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1120) at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1678) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)
2013/11/9 Romain Manni-Bucau <[email protected]> > So remove openwebbeans jar from the webapp to put them in tomcat libs > Le 9 nov. 2013 13:43, "aljesco" <[email protected]> a écrit : > > Yes >> >> >> 2013/11/9 Romain Manni-Bucau <[email protected]> >> >>> You kept owb in web-inf/lib? >>> Le 9 nov. 2013 13:22, "aljesco" <[email protected]> a écrit : >>> >>> I added >>>> <Listener >>>> className="org.apache.webbeans.web.tomcat.ContextLifecycleListener" /> >>>> into server.xml files. >>>> After that Tomcat throwed several ClassNotFoundExceptions because it >>>> couldn't find OWB libs. I >>>> put openwebbeans-impl-1.2.0.jar, openwebbeans-spi-1.2.0.jar, >>>> openwebbeans-tomcat7-1.2.0.jar >>>> and openwebbeans-web-1.2.0.jar into lib folder. Now Tomcat fails to start >>>> with exception >>>> ==== >>>> Caused by: java.lang.RuntimeException: java.lang.ClassCastException: >>>> Cannot cast org.apache.webbeans.service.DefaultLoaderService to >>>> org.apache.webbeans.spi.LoaderService >>>> at >>>> org.apache.webbeans.web.tomcat.ContextLifecycleListener.containerEvent(ContextLifecycleListener.java:200) >>>> at >>>> org.apache.catalina.core.ContainerBase.fireContainerEvent(ContainerBase.java:1398) >>>> at >>>> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4944) >>>> at >>>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) >>>> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) >>>> ... 10 more >>>> Caused by: java.lang.ClassCastException: Cannot cast >>>> org.apache.webbeans.service.DefaultLoaderService to >>>> org.apache.webbeans.spi.LoaderService >>>> at java.lang.Class.cast(Class.java:3094) >>>> at >>>> org.apache.webbeans.config.WebBeansContext.<init>(WebBeansContext.java:121) >>>> at >>>> org.apache.webbeans.config.WebBeansContext.<init>(WebBeansContext.java:98) >>>> at >>>> org.apache.webbeans.corespi.DefaultSingletonService.get(DefaultSingletonService.java:54) >>>> at >>>> org.apache.webbeans.corespi.DefaultSingletonService.get(DefaultSingletonService.java:28) >>>> at >>>> org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:51) >>>> at >>>> org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:164) >>>> at >>>> org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:182) >>>> at >>>> org.apache.webbeans.web.tomcat.TomcatUtil.inject(TomcatUtil.java:38) >>>> at >>>> org.apache.webbeans.web.tomcat.ContextLifecycleListener.containerEvent(ContextLifecycleListener.java:182) >>>> ... 14 more >>>> ==== >>>> What I'm doing wrong? >>>> >>>> >>>> 2013/11/9 Romain Manni-Bucau <[email protected]> >>>> >>>>> this one as tomcat listener >>>>> https://github.com/apache/openwebbeans/blob/trunk/webbeans-tomcat7/src/main/java/org/apache/webbeans/web/tomcat/ContextLifecycleListener.java >>>>> Le 9 nov. 2013 12:36, "aljesco" <[email protected]> a écrit : >>>>> >>>>> No, I didn't set it. What class should I set up as a listener? >>>>>> >>>>>> Do I need this lines in web.xml? >>>>>> >>>>>> <listener> >>>>>> >>>>>> <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class> >>>>>> </listener> >>>>>> <resource-env-ref> >>>>>> <resource-env-ref-name>BeanManager</resource-env-ref-name> >>>>>> >>>>>> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> >>>>>> </resource-env-ref> >>>>>> >>>>>> >>>>>> 2013/11/9 Romain Manni-Bucau <[email protected]> >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> Api jars are geronimo*spec ones (jcdi and atinject IIRC) >>>>>>> >>>>>>> In tomcat you need tomcat owb listener to get servlet injection, did >>>>>>> you set it? >>>>>>> Le 9 nov. 2013 12:13, "aljesco" <[email protected]> a écrit : >>>>>>> >>>>>>> Hello everyone, >>>>>>>> >>>>>>>> I've tried to get OWB working for about several hours on Tomcat 7 >>>>>>>> and afterall I got really confused. >>>>>>>> I'd be very thankful if someone can clarify some points with OWB. >>>>>>>> >>>>>>>> So, I'm developing a test project with just one servlet >>>>>>>> >>>>>>>> ==== >>>>>>>> @WebServlet(urlPatterns="/test") >>>>>>>> public class extends HttpServlet { >>>>>>>> >>>>>>>> private @Inject MyService s; >>>>>>>> @Override >>>>>>>> protected void doGet(HttpServletRequest req, HttpServletResponse >>>>>>>> resp) throws ServletException, IOException { >>>>>>>> >>>>>>>> WebBeansContext currentInstance = WebBeansContext.currentInstance(); >>>>>>>> MyService s2 = currentInstance.get(MyService.class); >>>>>>>> resp.getWriter().println(s); >>>>>>>> resp.getWriter().println("s2: " + s2.getHash()); >>>>>>>> } >>>>>>>> } >>>>>>>> ==== >>>>>>>> >>>>>>>> it tries get injected MyService instance which is POJO: >>>>>>>> >>>>>>>> ==== >>>>>>>> public class MyService { >>>>>>>> public MyService() { >>>>>>>> } >>>>>>>> public String getHash() { >>>>>>>> return new Random().nextInt() + ""; >>>>>>>> } >>>>>>>> } >>>>>>>> ==== >>>>>>>> >>>>>>>> here is WEB-INF/web.xml: >>>>>>>> >>>>>>>> ==== >>>>>>>> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" >>>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>>>>>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >>>>>>>> http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> >>>>>>>> <display-name>Archetype Created Web Application</display-name> >>>>>>>> <listener> >>>>>>>> >>>>>>>> <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class> >>>>>>>> </listener> >>>>>>>> <resource-env-ref> >>>>>>>> <resource-env-ref-name>BeanManager</resource-env-ref-name> >>>>>>>> >>>>>>>> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> >>>>>>>> </resource-env-ref> >>>>>>>> </web-app> >>>>>>>> ==== >>>>>>>> >>>>>>>> libs in WEB-INF/libs: >>>>>>>> >>>>>>>> openwebbeans-ee-common-1.2.0.jar >>>>>>>> openwebbeans-el22-1.2.0.jar >>>>>>>> openwebbeans-impl-1.2.0.jar >>>>>>>> openwebbeans-resource-1.2.0.jar >>>>>>>> openwebbeans-spi-1.2.0.jar >>>>>>>> openwebbeans-tomcat7-1.2.0.jar >>>>>>>> openwebbeans-web-1.2.0.jar >>>>>>>> xbean-asm-shaded-3.13.jar >>>>>>>> xbean-finder-shaded-3.13.jar >>>>>>>> >>>>>>>> The first question is about CDI implementation library. >>>>>>>> If I try to deploy webapp as it is, the Tomcat will fail with next >>>>>>>> exception: java.lang.NoClassDefFoundError: >>>>>>>> javax/enterprise/context/spi/Contextual >>>>>>>> I couldn't find OWB library which provides such class. I only >>>>>>>> grabbed javaee-api-6.0-5-tomcat.jar from TomEE and placed in under >>>>>>>> Tomcat 7 >>>>>>>> lib/ folder. >>>>>>>> What is a proper way to solve this problem? Where should I get >>>>>>>> javax.enterprise.context.* library? >>>>>>>> >>>>>>>> The second question is about CDI itself. >>>>>>>> After successful deploying (with javaee-api-6.0-5-tomcat.jar in >>>>>>>> lib/) I accessed my servlet by >>>>>>>> http://localhost:8080/testproject/test and got this responce: >>>>>>>> ==== >>>>>>>> >>>>>>>> null >>>>>>>> s2: 1064451662 >>>>>>>> >>>>>>>> ==== >>>>>>>> >>>>>>>> Why WebBeansContext.currentInstance().get(MyService.class) returns >>>>>>>> a proper instance of MyService class and fails to inject it into >>>>>>>> private >>>>>>>> @Inject MyService s? >>>>>>>> >>>>>>>> >>>>>> >>>> >>
