如何在TomEE Plus / Eclipse中使用Web应用程序项目创建/设置/使用EJB项目?

时间:2014-07-21 18:38:42

标签: eclipse java-ee web-applications ejb tomee

我正在尝试在TomEE Plus和Eclipse中使用带有Web应用程序项目的EJB项目。我可以在Web应用程序项目中使用无接口bean,但是当我创建新的EJB项目时,在Web应用程序上配置构建路径以包含EJB项目,TomEE将无法启动。

我将TomEE设置为在Eclipse中的TomEE属性的“服务器位置”窗格中使用Tomcat安装。如果我不这样做,我甚至无法在与Servlet相同的包中访问EJB。

代码很简单:

package mypackage;

import java.io.IOException;
// Package containing remote interface and bean implementation
// Remaining imports omitted
import beans.* ; 
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @EJB
    HelloSBNoI hb ;             // The bean located within this project (same package as servlet)

    @EJB
    HelloBeanRemote hbfejb ;    // The bean located in an ejb project

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                   throws ServletException, IOException {
        response.setContentType("text/html"); ;
        response.getWriter( ).write("Hello From Servlet <br />");
        response.getWriter( ).write("Hello From EJB in same package" + hb.from( ) );
        response.getWriter( ).write("<br />Hello From EJB in different project" +
                                     hbfejb.sayHelloEJB( ) );
    }
}

这是TomEE试图开始,但失败了:

  

2014年7月21日下午1:24:47 org.apache.catalina.core.ContainerBase startInternal   严重:子容器在启动时失败   java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ useremoteejb]]       at java.util.concurrent.FutureTask $ Sync.innerGet(FutureTask.java:252)       在java.util.concurrent.FutureTask.get(FutureTask.java:111)       在org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)       在org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:799)       在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)       在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)       在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:1110)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)       在java.lang.Thread.run(Thread.java:722)   引起:org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ useremoteejb]]       在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)       ......还有7个

引起:java.lang.NoClassDefFoundError:Lbeans / HelloBeanRemote;

at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2308)
at java.lang.Class.getDeclaredFields(Class.java:1760)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:261)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:140)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:400)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:876)
at org.apache.tomee.catalina.OpenEJBContextConfig.configureStart(OpenEJBContextConfig.java:113)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:371)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: java.lang.ClassNotFoundException: beans.HelloBeanRemote
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.apache.tomee.catalina.LazyStopWebappClassLoader.loadClass(LazyStopWebappClassLoader.java:143)
... 22 more

我花了好几个小时试图找出一个简单的配置错误!

提前感谢您的专家协助

1 个答案:

答案 0 :(得分:0)

是的,是的......

我还没弄明白如何让网络应用程序查看ejb项目,但我导出了ejb项目并复制了JAR文件WEB-INF / lib。

所以,这是半个面包,但现在还可行。