在(引用)Web项目中找不到引用的EJB项目的类

时间:2011-09-29 00:03:58

标签: eclipse servlets ejb

我正在学习J2EE和EJB,但我遇到了一个奇怪的问题。这是我的项目设置:

我正在使用Glassfish 3.1和Eclipse 3.7。我在Eclipse中有两个项目:

  1. 符合EJB 3.0的项目myEjbProject
  2. 动态网络项目,myWebProject
  3. 我正在将mySessionBeanPackage.mySessionBean中的EJB会话bean myEjbProject注入myServletPackage.myServlet中的servlet myWebProject,然后(在servlet中)调用一个在会话bean。

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

      

    严重:未找到类[LmySessionBeanPackage / mySessionBean]。加载[class myServletPackage.myServlet]

    时出错

    请注意,两者 EJB项目和Web项目已经发布到服务器,我已经仔细检查过为bean生成的类文件实际上是否存在于服务器上(所以我想不出服务器无法找到它们的原因。)

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

    我也试过

    • myEjbProject的classes文件夹显式添加到Java Build Path - > myWebProject的库列表。这是项目参考的补充(虽然我认为首先添加项目参考应该已经足够了)。无论如何,它没有任何区别(与以前相同的错误信息)。

    • 使用导出功能从myEjbProject创建JAR文件 - > EJB Jar File选项(我现在不想编写Ant脚本)。然后我把这个JAR放在Java Build Path中 - > myWebProject的图书馆部分。这种方法也没有解决问题(与以前相同的错误信息)。

    • 将会话bean修改为

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

      并相应地修改注射。例如,对于只有本地接口的bean,我使用了:

        

      @EJB mySessionBeanPackage.mySessionBeanLocal myBean

      这种方法也没有解决问题(与以前相同的错误信息)。

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

      将会话bean成功注入servlet
        

      @EJB mySessionBeanPackage.mySessionBean myBean

    • 完全取消myEjbProject并将会话bean添加到myWebProject mySessionBeanPackage.mySessionBean(新包)。在这种情况下,我也可以使用

      将会话bean成功注入servlet
        

      @EJB mySessionBeanPackage.mySessionBean myBean

1 个答案:

答案 0 :(得分:12)

我建议您查看Eclipse打包并部署到服务器的实际EAR。您可以通过导出EAR项目(右键单击EAR项目 - > export - > Java EE - > EAR文件)来完成此操作

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

  1. EJB和WEB项目是EAR项目的模块。右键单击EAR项目 - >属性 - >部署组件 - >添加 - >项目 - >选择EJB和WEB项目。如果现在导出EAR项目,您会注意到EJB和WEB项目与EAR一起打包。
  2. 将EJB项目添加到WEB项目的MANIFEST中。右键单击WEB项目 - >属性 - >部署组件 - >清单条目 - >添加 - >选择EJB项目。您可以打开MANIFEST.MF文件,看它现在包含EJB项目。
  3. 我也喜欢将EJB项目添加到WEB项目构建路径中,以便它包含在WEB的类路径中:右键单击WEB项目 - >属性 - > Java构建路径 - >项目 - >添加 - >选择EJB。