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

标签 eclipse servlets ejb

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

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

  • 一个符合 EJB 3.0 的项目,myEjbProject
  • 一个动态网络项目,myWebProject

  • 我正在注入(inject)一个 EJB session bean mySessionBeanPackage.mySessionBean来自 myEjbProject进入 servlet myServletPackage.myServletmyWebProject然后(在 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 部分。 .这种方法也不能解决问题(与以前相同的错误消息)。
  • 修改 session bean 以具有
  • 无接口(interface)
  • 本地接口(interface)
  • 远程接口(interface)

  • 并相应地修改注入(inject)。例如,对于只有本地接口(interface)的 bean,我使用:

    @EJB mySessionBeanPackage.mySessionBeanLocal myBean



    这种方法也没有解决问题(与以前相同的错误消息)。
  • 取消myEjbProject将 session bean 添加到 myWebProjectmyServletPackage.mySessionBean (与 servlet 相同的包)。在这种情况下,我可以使用成功地将 session bean 注入(inject)到 servlet

    @EJB mySessionBeanPackage.mySessionBean myBean

  • 取消myEjbProject将 session bean 添加到 myWebProjectmySessionBeanPackage.mySessionBean (一个新包)。在这种情况下,我也可以使用成功地将 session bean 注入(inject)到 servlet

    @EJB mySessionBeanPackage.mySessionBean myBean

  • 最佳答案

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

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

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

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

    关于eclipse - 在(引用的)Web 项目中找不到引用的 EJB 项目的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591056/

    相关文章:

    eclipse - 适用于Eclipse的AWS Toolkit在Eclipse Luna上失败

    jsp - 从 Java bean 获取数据以显示在 JSP 页面上

    java - 为什么我们不能调用 servlet 构造函数而不是 init 方法来初始化配置参数?

    ejb - 如何在 @Asynchronous jax-rs bean 方法中设置 Swagger 以忽略 @Suspended AsyncResponse?

    java - 当客户端 VM 突然终止时,有状态 EJB 不会被钝化

    jakarta-ee - javax.命名.NameNotFoundException : While trying to lookup 'abc' didn't find subcontext 'abc'

    java - Android:抽屉导航 NullPointerException

    java - 简单的 Java 猜测程序。继续

    android - 三星 galaxy tab 10.1 模拟器

    java - 将信息从 servlet 发送到 jsp 页面