2010-08-01 92 views
2

我有一個應用程序使用Wicket在GlassFish v3.0.1上部署了CDI/Weld,JPA 2.0,EJB 3.1等(Java EE 6)的表示層。使用Wicket/JPA注入實體管理器時出現錯誤

當我嘗試使用@EJB我收到以下錯誤注入一個EJB到檢票頁: java.lang.IllegalStateException:無法檢索EntityManagerFactory的對的unitName

當我嘗試使用@Inject注入,我收到以下錯誤: java.lang.IllegalStateException:無法將ejb UserRepository的ejbRef轉換爲類的業務對象

我認爲問題源於JPA。我使用的是與使用正確的JSF應用程序完全相同的配置,因此我對丟失的問題可能是什麼。連接池設置正確,並通過GlassFish正確ping,並且在類路徑中包含了wicket-weld,我甚至嘗試使用舊的Java EE 5 wicketstuff項目wicketstuff-javaeeapi獲得相同的結果。

任何幫助,將不勝感激。

回答

1

如果你得到的異常:

Unable to retrieve EntityManagerFactory for unitName

這可能意味着它沒有檢測到您的persistence.xml文件。確保它在WEB-INF\classes\META-INF目錄中。

您可以通過轉到GlassFish中的管理控制檯來驗證您的應用是否啓用了JPA,請轉至應用部分,看看它是否爲您的應用顯示類似[ejb, web, weld, jpa]的內容。如果它不顯示jpa那麼它不會找到您的JPA配置文件。

+1

你是我的英雄!爲什麼它與JSF配置不同?爲什麼不記錄更好? – kgrad 2010-08-02 19:36:17

0

可以隨時嘗試通過標準的「java:global」名稱來查找EJB。這應該至少讓你排除作爲問題的可能來源的檢票口並讓你更接近工作系統。

+0

感謝您的建議,我已經使用jndi查找來嘗試獲取EJB,並且我得到了相同的EMF錯誤。我正在用盡想法。 – kgrad 2010-08-01 22:53:39

+0

聽起來像一個EJB/JPA問題,根本不涉及Wicket。如果你還沒有,填寫'unitName'和'name'屬性; @PersistenceUnit(unitName =「foo」)應該與persistence.xml/完全匹配 - 請注意,您可以使用默認規則並且不指定unitName,但如果另一個持久性單元被添加到應用程序或persistence.xml中。 – 2010-08-02 17:25:09

相關問題