openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Niki Dokovski" <nick...@gmail.com>
Subject RE: OWB on Tomcat 7
Date Sat, 09 Nov 2013 14:01:36 GMT
Hi Mark,

 

From: Mark Struberg [mailto:struberg@yahoo.de] 
Sent: Saturday, November 9, 2013 3:25 PM
To: user@openwebbeans.apache.org
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 <aljesco@gmail.com <mailto:aljesco@gmail.com> >
To: user@openwebbeans.apache.org <mailto:user@openwebbeans.apache.org>  
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 <rmannibucau@gmail.com
<mailto:rmannibucau@gmail.com> >

Hmm

Here im not sure but maybe remove it from your web.xml

Le 9 nov. 2013 13:52, "aljesco" <aljesco@gmail.com
<mailto:aljesco@gmail.com> > 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.afterStartApplicatio
n(WebContainerLifecycle.java:125)

at
org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLif
eCycle.java:132)

at
org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(Web
ContainerLifecycle.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:9
01)

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:1
678)

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:11
45)

at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
15)

at java.lang.Thread.run(Thread.java:744)

 

 

2013/11/9 Romain Manni-Bucau <rmannibucau@gmail.com
<mailto:rmannibucau@gmail.com> >

So remove openwebbeans jar from the webapp to put them in tomcat libs

Le 9 nov. 2013 13:43, "aljesco" <aljesco@gmail.com
<mailto:aljesco@gmail.com> > a écrit :

 

Yes

 

2013/11/9 Romain Manni-Bucau <rmannibucau@gmail.com
<mailto:rmannibucau@gmail.com> >

You kept owb in web-inf/lib?

Le 9 nov. 2013 13:22, "aljesco" <aljesco@gmail.com
<mailto:aljesco@gmail.com> > 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(Conte
xtLifecycleListener.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(DefaultSingletonServ
ice.java:54)

at
org.apache.webbeans.corespi.DefaultSingletonService.get(DefaultSingletonServ
ice.java:28)

at
org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinde
r.java:51)

at
org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:
164)

at
org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.j
ava:182)

at org.apache.webbeans.web.tomcat.TomcatUtil.inject(TomcatUtil.java:38)

at
org.apache.webbeans.web.tomcat.ContextLifecycleListener.containerEvent(Conte
xtLifecycleListener.java:182)

... 14 more

====

What I'm doing wrong?

 

2013/11/9 Romain Manni-Bucau <rmannibucau@gmail.com
<mailto:rmannibucau@gmail.com> >

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" <aljesco@gmail.com
<mailto:aljesco@gmail.com> > 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</l
istener-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 <rmannibucau@gmail.com
<mailto:rmannibucau@gmail.com> >

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" <aljesco@gmail.com
<mailto:aljesco@gmail.com> > 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</l
istener-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?

 

 

 

 

 

 

 


Mime
View raw message