2013-04-23 66 views
2

我想使用Mojarra和Weld在Apache TomEE上运行WebApp。
在TomEE中使用焊接CDI而不是OpenWebBeans

我把“javax.faces-2.1.21.jar”和“weld-servlet.jar”放在我的/ WEB-INF/lib目录中。我还在我的WEB-INF文件夹中添加了一个空的“beans.xml”。我的 “web.xml中” 看起来是这样的:


/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 

    <display-name>TestWeldOnTomEE</display-name> 

    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <context-param> 
    <param-name>javax.faces.PROJECT_STATE</param-name> 
    <param-value>Development</param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
    </listener> 

</web-app> 



部署在Tomcat的应用程序正常工作,但与TomEE我得到以下错误在服务器启动时:

SEVERE: Error configuring application listener of class org.jboss.weld.environment.servlet.Listener 
java.lang.ClassNotFoundException: org.jboss.weld.environment.servlet.Listener 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558) 
    at org.apache.tomee.catalina.LazyStopWebappClassLoader._loadClass(LazyStopWebappClassLoader.java:103) 
    at org.apache.tomee.catalina.LazyStopWebappClassLoader.loadClass(LazyStopWebappClassLoader.java:98) 
    at org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:54) 
    at org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:48) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4733) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    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:722) 



由于TomEE已经使用了另一个CDI-Framework(OpenWebB),是否有问题?有没有可能让TomEE与Weld一起运行?

+0

我很好奇你为什么想要这样做? – 2013-04-24 08:15:53

回答

3

你绝对可以让TomEE使用Mojarra而不是MyFaces。然而,由于CDI实现的集成方式的复杂性,使用Weld而不是OpenWebBeans是不可能的。

对于使用Mojarra来代替,只是在物理上删除<tomee-home>/lib/myfaces-*.jar文件,并将Mojarra impl和api jar放在那里。

+1

更新 - 我们现在通过TomEE Plume与Mojarra和EclipseLink标准配合 – 2014-10-23 00:22:54

0

您发布的代码中的根本问题是,对于普通的ServletContainers,只需要org.jboss.weld.environment.servlet.Listener。例如。如果您没有完整的Java EE服务器,将Weld集成到jetty或Tomcat中。 (Apache OpenWebBeans中的挂件是WebBeansConfigurationListener)

但是TomEE是一个完整的JavaEE6服务器!因此它默认启用CDI。你不需要自己添加任何东西。

相关问题