2012-05-16 51 views
0

我想注入一個EM到一個Servlet中,持久化單元在EJB JAR中聲明。我有一個帶有EJB JAR和WAR的EAR。
的問題是,我得到這個錯誤:在Servlet中注入EntityManager?

Could not resolve a persistence unit corresponding to the persistence-context-ref-name [cvu.JpaServlet/em] in the scope of the module called

如果我把persistence.xml中它工作正常的戰爭,但我不想這樣做。

我可以從EJB JAR中聲明的PersistenceUnit(persistence.xml)獲取EntityManager嗎?

回答

0

我想你需要將ejb jar添加到你的戰爭類路徑中。

一般來說,您應該將一個EntityManagerFacotry注入到一個Servlet中,而不是一個EntityManager,因爲一個Servlet是共享的。

你也可以使用SessionBeans包裝你的持久性。

+0

是的我知道,但我只是想測試它:)我會用ejb jar在war的classpath中嘗試這個東西.. Servlet確實看到了SessionBeans,爲什麼他看不到持久單元! –

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。