Now web.xml contain only
<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>
</web-app>
Ans that exception is still thrown.
Here is lines from WebContainerLifecycle.java:
124:ELAdaptor elAdaptor =
getWebBeansContext().getService(ELAdaptor.class);
125:ELResolver resolver = elAdaptor.getOwbELResolver();
NPE is being thrown on elAdaptor.getOwbELResolver(); , but why?
ELAdaptor.class is in openwebbeans-spi-1.2.0.jar which is placed under lib
in tomcat. I don't know what to do with all of this.
2013/11/9 Romain Manni-Bucau <[email protected]>
> Hmm
>
> Here im not sure but maybe remove it from your web.xml
> Le 9 nov. 2013 13:52, "aljesco" <[email protected]> a écrit :
>
> 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?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>>