2010-08-01 41 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

相关问题