【发布时间】:2014-09-12 09:14:25
【问题描述】:
我正在尝试在 TomEE Plus 和 Eclipse 中将 EJB 项目与 Web 应用程序项目一起使用。我可以在 Web 应用项目中使用无接口 bean,但是当我创建新的 EJB 项目时,在 Web 应用上配置构建路径以包含 EJB 项目,TomEE 将无法启动。
我在 Eclipse 的 TomEE 属性的服务器位置窗格中将 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]] 在 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) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 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
我花了好几个小时试图找出看似简单的配置错误!
提前感谢您的专家协助
【问题讨论】:
标签: eclipse jakarta-ee web-applications ejb apache-tomee