我有一个使用Wicket的应用程序,用于在GlassFish v3.0.1上部署CDI / Weld,JPA 2.0,EJB 3.1等(Java EE 6)的表示层。
当我尝试使用@EJB将EJB注入wicket页面时,我收到以下错误: java.lang.IllegalStateException:无法检索unitName
的EntityManagerFactory当我尝试使用@Inject注入时,我收到以下错误: java.lang.IllegalStateException:无法将ejbRef for ejb UserRepository转换为类型为
的业务对象我认为问题源于JPA。我正在使用与我正常使用的JSF应用程序使用的完全相同的配置,因此我很遗憾问题可能是什么。连接池设置正确并通过GlassFish正确ping通,我在类路径中包含了wicket-weld,我甚至尝试使用旧的Java EE 5 wicketstuff项目获得wicketstuff-javaeeapi,结果相同。
任何帮助都将不胜感激。
答案 0 :(得分:1)
如果你得到例外:
无法检索unitName
的EntityManagerFactory
这可能意味着它没有检测到您的persistence.xml
文件。确保它在WEB-INF\classes\META-INF
目录中。
您可以转到GlassFish中的管理控制台,验证您的应用是否启用了JPA,转到“应用”部分,看看它是否为您的应用显示[ejb, web, weld, jpa]
。如果它没有显示jpa
,则它找不到您的JPA配置文件。
答案 1 :(得分:0)
总是可以尝试通过其标准的“java:global”名称来查找EJB。至少应该让你排除wicket作为问题的可能来源,让你更接近工作系统。