we could hack a ServletContainerInitializer but not sure the gain
compared to using tomee which will always be far more integrated "by
design"
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau



2013/11/9 Mark Struberg <[email protected]>:
> Hi Niki!
>
> Karl and I did already work on improving our documentation at least ;)
>
> http://openwebbeans.apache.org/owbsetup_ee.html
>
> Please ping us if you find a failure!
>
> LieGrue,
> strub
>
>
> ________________________________
> From: Niki Dokovski <[email protected]>
> To: [email protected]; 'Mark Struberg' <[email protected]>
> Sent: Saturday, 9 November 2013, 15:01
> Subject: RE: OWB on Tomcat 7
>
> Hi Mark,
>
> From: Mark Struberg [mailto:[email protected]]
> Sent: Saturday, November 9, 2013 3:25 PM
> To: [email protected]
> Subject: Re: OWB on Tomcat 7
>
> Hi folks!
>
> There are 2 different ways to work with OpenWebBeans and tomcat.
>
>
>
> A, your app is using CDI but you do not need the container to understand
> CDI.
> In that case just add owb-core jar + spi + xbean-asm4-shaded + owb-web into
> your WEB-INF/lib and add WebBeansConfigurationListener to your web.xml as
> <listener>
>
> This works perfect, but be aware that there is no CDI injection in Servlets
> themself. You can of course use DeltaSpike BeanProvider to pick up
>
> B.) you need it fully integrated with all other EE technologies. In that
> case I suggest you use TomEE. This is basically tomcat7 + latest OWB  +
> latest MyFaces + + +. And all that in a perfectly integrated and ready to
> use configuration.
>
> IMHO, there might be cases where you don’t need my faces or you just want to
> test the latest web container with the latest CDI. Current owb documentation
> is a bit confusing indeed and you need to look into the source code to
> understand what you need to configure and where. Which might be good
> exercise anyway. I like the “plugins” architecture of OWB but the
> integration with tomcat can be improved. The CDI RI did a bit better with
> the integration with Tomcat for now. (Yes you still need the servlet
> listener to bootstrap the CDI container)
>
> Do you folks have plans to reconsider current integrations points with
> tomcat? Are there any particular ideas for what can be improved on tomcat
> side to make the integration better?
>
> Cheers
> Niki
>
>
> LieGrue,
> strub
>
>
>
> ________________________________
> From: aljesco <[email protected]>
> To: [email protected]
> Sent: Saturday, 9 November 2013, 14:04
> Subject: Re: OWB on Tomcat 7
>
> 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?
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

Reply via email to