【问题标题】:Injection of EntityManager in Servlet?在Servlet中注入EntityManager?
【发布时间】:2012-05-24 01:35:27
【问题描述】:

我想将 EM 注入 Servlet,持久化单元在 EJB JAR 中声明。我有一个带有 EJB JAR 和 WAR 的 EAR。
问题是我收到此错误:

无法解析与 persistence-context-ref-name [cvu.JpaServlet/em] 范围内 模块调用

如果我将 persistence.xml 放在 WAR 中,它可以正常工作,但我不想这样做。

我可以从 EJB JAR 中声明的 PersistenceUnit (persistence.xml) 中获取 EntityManager 吗?

【问题讨论】:

    标签: jakarta-ee servlets jpa ejb entitymanager


    【解决方案1】:

    我认为您需要将 ejb jar 添加到您的战争类路径中。

    一般来说,您应该将 EntityManagerFacotry 注入 Servlet,而不是 EntityManager,因为 Servlet 是共享的。

    您还可以使用 SessionBeans 包装您的持久性。

    【讨论】:

    • 是的,我知道,但我只是想测试一下 :) 我会在 war 的类路径中尝试使用 ejb jar 的东西 .. Servlet 确实看到了 SessionBeans,为什么他看不到 Persistence Unit !?
    【解决方案2】:

    我将我所有的持久性类和persistence.xml 移到persist.jar 中,并将其放入ear/lib。现在它适用于 EJB 和 WAR。如果您将persistence.xml 放在您的name.war/WEB-INF/classes/META-INF/persistence.xml 中,您将无法在EJB 中使用它。如果将它放在 EJB 中,您将无法在 WAR 中使用 @PersistenceUnit EntityManagerFactory。为了让您在 WAR 中访问它,您也可以将其放在 WEB-INF/lib/persist.jar/META-INF/persistence.xml 中。但更好的是 EAR。

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多