2013-04-23 5 views
2

Я хотел бы запустить WebApp на Apache TomEE с помощью Mojarra и Weld.
Использование Weld CDI вместо OpenWebBeans в TomEE

Я поместил «javax.faces-2.1.21.jar» и «weld-servlet.jar» в каталог my/WEB-INF/lib. Я также добавил пустой «beans.xml» в папку WEB-INF. Мой "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-платформу (OpenWebB)? Есть ли возможность заставить TomEE работать с Weld?

+0

Мне любопытно, почему вы хотели бы это сделать? –

ответ

3

Вы можете определенно получить TomEE для использования Mojarra вместо MyFaces. Использование Weld вместо OpenWebBeans, однако, невозможно из-за сложности реализации интегрированных CDI-реализаций.

Для использования Mojarra вместо этого просто физически удалите файлы <tomee-home>/lib/myfaces-*.jar и вместо этого поставьте вместо них мохерра и api jar.

+1

Обновление - теперь мы отправляем стандартно с Mojarra и EclipseLink через TomEE Plume –

0

Основная проблема в коде, который вы опубликовали, заключается в том, что org.jboss.weld.environment.servlet.Listener просто необходим для простых ServletContainers. Например. интегрируя Weld в причал или Tomcat, если у вас нет полного Java EE-сервера. (Подвеска в Apache OpenWebBeans - это WebBeansConfigurationListener)

Но TomEE - это полный сервер JavaEE6! Таким образом, он поставляется с включенным CDI по умолчанию. Вам ничего не нужно будет добавлять сами.

Смежные вопросы