我正在学习 J2EE 和 EJB,但遇到了一个奇怪的问题。这是我的项目设置:
我正在使用 Glassfish 3.1 和 Eclipse 3.7。我在 Eclipse 中有两个项目:
myEjbProject
myWebProject
我正在注入(inject)一个 EJB session bean
mySessionBeanPackage.mySessionBean
来自 myEjbProject
进入 servlet myServletPackage.myServlet
在 myWebProject
然后(在 servlet 中)调用 session bean 中定义的简单方法。我提供了
myWebProject
引用 myEjbProject
(使用属性 -> 项目引用对话框)。但是,由于某种原因,服务器是 无法找到 session bean。我得到的确切错误是:SEVERE: Class [ LmySessionBeanPackage/mySessionBean ] not found. Error while loading [ class myServletPackage.myServlet ]
请注意,EJB 项目和 Web 项目都已发布到服务器,我已经仔细检查了为 bean 生成的类文件实际上是否存在于服务器上(所以我想不出原因为什么服务器无法找到它们)。
谁能告诉我我做错了什么?
我也试过
myEjbProject
的classes文件夹明确地指向 myWebProject
的 Java 构建路径 -> 库列表.这是对项目引用的补充(尽管我认为首先添加项目引用就足够了)。无论如何,它没有区别(与以前相同的错误消息)。 myEjbProject
创建 JAR 文件使用 Export -> EJB Jar File 选项(我现在不想编写 Ant 脚本)。然后我把这个 JAR 放到 myWebProject
的 Java Build Path -> Libraries 部分。 .这种方法也不能解决问题(与以前相同的错误消息)。 并相应地修改注入(inject)。例如,对于只有本地接口(interface)的 bean,我使用:
@EJB mySessionBeanPackage.mySessionBeanLocal myBean
这种方法也没有解决问题(与以前相同的错误消息)。
myEjbProject
将 session bean 添加到 myWebProject
如myServletPackage.mySessionBean
(与 servlet 相同的包)。在这种情况下,我可以使用成功地将 session bean 注入(inject)到 servlet
@EJB mySessionBeanPackage.mySessionBean myBean
myEjbProject
将 session bean 添加到 myWebProject
如mySessionBeanPackage.mySessionBean
(一个新包)。在这种情况下,我也可以使用成功地将 session bean 注入(inject)到 servlet
@EJB mySessionBeanPackage.mySessionBean myBean
最佳答案
我建议查看 Eclipse 打包并部署到服务器的实际 EAR。您可以通过导出 EAR 项目来执行此操作(右键单击 EAR 项目 -> 导出 -> Java EE -> EAR 文件)
我认为您缺少的步骤是将 EJB 项目添加到 WEB 项目的 MANIFEST 文件中。但万一你错过了几个步骤,我会检查以下内容:
我还喜欢将 EJB 项目添加到 WEB 项目构建路径中,以便它包含在 WEB 的类路径中:右键单击 WEB 项目 -> 属性 -> Java 构建路径 -> 项目 -> 添加 -> 选择 EJB。
关于eclipse - 在(引用的)Web 项目中找不到引用的 EJB 项目的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591056/