我正在学习J2EE和EJB,但我遇到了一个奇怪的问题。这是我的项目设置:
我正在使用Glassfish 3.1和Eclipse 3.7。我在Eclipse中有两个项目:
myEjbProject
myWebProject
我正在将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相同的包)。在这种情况下,我可以使用
@EJB mySessionBeanPackage.mySessionBean myBean
完全取消myEjbProject
并将会话bean添加到myWebProject
mySessionBeanPackage.mySessionBean
(新包)。在这种情况下,我也可以使用
@EJB mySessionBeanPackage.mySessionBean myBean
答案 0 :(得分:12)
我建议您查看Eclipse打包并部署到服务器的实际EAR。您可以通过导出EAR项目(右键单击EAR项目 - > export - > Java EE - > EAR文件)来完成此操作
我认为您缺少的步骤是将EJB项目添加到WEB项目的MANIFEST文件中。但是,如果你错过了几个步骤,我会检查以下内容:
我也喜欢将EJB项目添加到WEB项目构建路径中,以便它包含在WEB的类路径中:右键单击WEB项目 - >属性 - > Java构建路径 - >项目 - >添加 - >选择EJB。