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