在Servlet中注入EntityManager?

时间:2012-05-16 13:18:01

标签: java-ee servlets jpa ejb entitymanager

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

  

无法解析与之对应的持久性单元   persistence-context-ref-name [cvu.JpaServlet / em]的范围   名为

的模块

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

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

2 个答案:

答案 0 :(得分:0)

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

通常,您应该将EntityManagerFacotry注入Servlet,而不是EntityManager,因为Servlet是共享的。

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

答案 1 :(得分:0)

我移动了所有的持久性课程&将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。