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

ars*_*vis 5 eclipse servlets ejb

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

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

  1. 符合EJB 3.0的项目, myEjbProject
  2. 动态Web项目, myWebProject

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

我已经提供myWebProject了一个引用myEjbProject(使用Properties - > Project References对话框).但是,由于某种原因,服务器无法找到会话bean.我得到的确切错误是:

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

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

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

我也试过了

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

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

  • 修改会话bean

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

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

    @EJB mySessionBeanPackage.mySessionBeanLocal myBean

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

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

    @EJB mySessionBeanPackage.mySessionBean myBean

  • 废除myEjbProject干脆加入会话bean myWebProject作为mySessionBeanPackage.mySessionBean(新包装).在这种情况下,我也可以使用成功地将会话bean注入到servlet中

    @EJB mySessionBeanPackage.mySessionBean myBean

Ros*_*oss 12

我建议看看Eclipse打包并部署到服务器的实际EAR.您可以通过导出EAR项目(右键单击EAR项目 - >导出 - > 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项目.

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

  • 2号对我来说成功了。谢谢你,谢谢你,谢谢你!:) 我还没有创建 EAR 项目,因为我认为我应该从简单的开始。最后一行,是的,我已经有了。干杯。 (2认同)