【问题标题】:what's the "correct" way to put an EJB in a JPA project?将 EJB 放入 JPA 项目的“正确”方法是什么?
【发布时间】:2012-02-23 17:22:49
【问题描述】:

我有一个在 WebSphere 7 上使用 Eclipse 3.4(又名 IBM RAD)构建的简单项目。

我的工作区中有一个 EAR 项目、一个 EJB 项目和一个 JPA 项目。

简短版:

我的 EJB 项目中的一个 ejb 正在引用我的 JPA 项目中的一个 EJB,但它给了我一个 EJBNotFoundException 错误。

在我的 JPA 项目中放置 EJB 的“正确”方式是什么?

更新

一位同事告诉我 EJB 应该在 EJB 项目中,而不是在 JPA 项目中。这就是我做错的一切吗?希望对此发表第二意见,谢谢。

长版:

在 JPA 项目中,我有我的实体/域对象(例如 Workflow.java)和一个 DAO(例如 WorkflowDAO.java),它被注释为带有 @Stateless 的 EJB。

在 EJB 项目中,我有一个 ejb(例如 WorkflowService.java),它被注释为带有 @Stateless 的 @EJB。

WorkflowService.java 像这样引用 WorkflowDAO:

@Stateless
public class WorkflowService /*...*/
  @EJB
  private WorkflowDAO workflowDAO; /*...*

问题是,当我部署到服务器时出现以下错误:

com.ibm.ejs.container.EJBNotFoundException,具有接口 test.WorkflowDAO 的 EJB 不存在于应用程序 testEAR 中。

非常感谢任何帮助,谢谢!

罗伯

【问题讨论】:

    标签: eclipse jakarta-ee ejb


    【解决方案1】:

    您必须将ejb-jar 打包到ear 文件的根目录下,并将jpa-jar 放在lib 目录中。当您创建 JPAEJB Project 并将它们添加到单独的 Enterprise Java Project 时,Eclipse 通常会负责打包。

    更新: 从您的 cmets 得出的结论是,您做错了。您应该运行EAR Project,并将您的JPAEJB 项目添加到其中。您应该检查 EAR 项目属性并确保您的 JPA 和 EJB 项目列在 Deployment Assembly 选项卡上。如果没有,您可以在那里添加它们。看截图:

    【讨论】:

    • 不过,我在 Eclispe 中看到了这个错误。我还没有构建和部署 EAR 文件。任何进一步的想法或细节都会有所帮助,谢谢!
    • I have not yet built and deployed the EAR file 什么意思?您说,您在尝试将其部署到服务器时遇到此异常,对吗?
    • 我的意思是我没有手动将 EAR 文件部署到 WebSphere。我在 Eclipse IDE 中运行应用程序时出现错误(服务器列表中有 WebSphere 7)。你知道我的意思吗?
    • 并非如此。您究竟是如何尝试从 Eclipse 运行它的?
    • 我的 Eclipse 工作区有各种项目(EAR、EJB、JPA、Web)。要运行该应用程序,我右键单击 EJB 项目,选择 Run as > Run on Server > WebSphere 7 —— 服务器似乎已启动,但日志中有一个堆栈跟踪指示 EJBNotFoundException。希望澄清,谢谢!
    【解决方案2】:

    仅供参考,我已经深入挖掘并学到了更多。我添加了一个新问题,更具体地描述了我的问题:

    why can't my EAR project see the annotated EJBs and Entities in my JPA project?

    【讨论】:

    • 那么,您考虑将 this 作为您问题的答案吗?也许如果这是答案,您至少可以尝试解释一下您实际上是如何解决您的问题的?
    • 我没有解决问题。 TestJPA 项目中的 EJB 仍然不可见,我不得不将它们移到 TestEJB 项目中。我将此“答案”标记为“正确”,因为指向新简化问题的链接是我找到问题解决方案的唯一途径。你的回答(上面)没有帮助;可能是因为您的说明适用于 Eclipse 3.5 或更高版本。就像我在问题中所说的那样,我使用的是 Eclipse 3.4。
    • 关键是您可以等到找到解决方案,然后发布并接受作为答案。你刚刚接受的不是答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2014-12-08
    相关资源
    最近更新 更多