2011-09-29 40 views
5

我正在学习J2EE和EJB,并且遇到了一个奇怪的问题。这是我的项目设置:在(引用)Web项目中找不到引用EJB项目的类

我使用的是Glassfish 3.1和Eclipse 3.7。我在Eclipse两个项目:

  1. 一个EJB 3.0兼容的项目,myEjbProject
  2. 一个动态Web项目,myWebProject

我从myEjbProject注入一个EJB会话bean mySessionBeanPackage.mySessionBean成servlet myServletPackage.myServletmyWebProject中,然后(在servlet中)调用会话bean中定义的简单方法。

我提供了myWebProject参考myEjbProject(使用属性 - >项目引用对话框)。但是,出于某种原因,服务器是无法找到会话bean。我得到的确切错误是:

SEVERE:未找到类[LmySessionBeanPackage/mySessionBean]。加载时出错[类myServletPackage.myServlet]

注意 EJB项目和Web项目已发布到服务器,我已经反复检查为bean生成的类文件,实际上,存在于服务器上(所以我想不出为什么服务器无法找到它们)。

谁能告诉我我做错了什么?

我也试过

  • 加入myEjbProject类文件夹明确到Java构建路径 - 的myWebProject>库列表。这是除了项目参考之外(尽管我认为首先添加项目参考应该是足够的)。无论如何,它没有区别(和以前一样的错误信息)。

  • 使用Export - > EJB Jar File选项(我不想写入Ant脚本)创建一个来自myEjbProject的JAR文件。然后,我将这个JAR放入了myWebProject的Java Build Path - > Libraries部分。这种方法也不能解决问题(与以前相同的错误信息)。

  • 修改所述会话bean具有

    • 没有界面
    • 本地接口
    • 远程接口

    和相应地修改注射。例如。,对于只有一个本地接口的bean,我用:

    @EJB mySessionBeanPackage.mySessionBeanLocal myBean

    这种做法并没有解决问题,或者(同样的错误消息之前)。

  • 完全废除myEjbProject,并将会话bean添加到myWebProject作为myServletPackage.mySessionBean(与servlet的包相同)。在这种情况下,我可以使用

    @EJB mySessionBeanPackage.mySessionBean myBean

  • myEjbProject废除干脆加入会话bean myWebProjectmySessionBeanPackage.mySessionBean(新包装)成功注入会话bean到servlet。在这种情况下,我能成功注入会话bean到使用

    @EJB mySessionBeanPackage.mySessionBean myBean

回答

12

我建议考虑看看实际的EAR了Eclipse包的servlet和部署到服务器。您可以通过导出EAR项目(右键单击EAR项目 - >导出 - > Java EE - > EAR文件)执行此操作

我认为您缺少的步骤是将EJB项目添加到WEB项目的MANIFEST文件。但是,如果您错过了几个步骤,我会检查以下内容:

  1. EJB和WEB项目是EAR项目的模块。右键单击EAR项目 - >属性 - >部署程序集 - >添加 - >项目 - >选择EJB和WEB项目。如果您现在导出您的EAR项目,您会注意到EJB和WEB项目与EAR一起打包。
  2. 将EJB项目添加到WEB项目的MANIFEST。右键单击WEB项目 - > properties - > Deployment Assembly - > Manifest entries - > Add - >选择EJB项目。您可以打开MANIFEST.MF文件并查看它现在包含EJB项目。

另外我喜欢将EJB项目添加到WEB项目构建路径中,以便它包含在WEB的类路径中:右键单击WEB项目 - >属性 - > Java构建路径 - >项目 - >添加 - >选择EJB。

+1

第2号为我做了诡计。谢谢你,谢谢你,谢谢你! :) 我还没有创建EAR项目,因为我认为我会开始简单。最后一行,是的,我已经有了。干杯。 –

+0

优秀! #2为我挽救了更多的头发。谢谢! –

相关问题