使用 Wicket/JPA 注入实体管理器时出错
我有一个使用 Wicket 作为表示层的应用程序,其中包含 CDI/Weld、JPA 2.0、EJB 3.1 等(Java EE 6),部署在 GlassFish v3.0.1 上。
当我尝试使用 @EJB 将 EJB 注入 wicket 页面时,出现以下错误: java.lang.IllegalStateException:无法检索 unitName 的 EntityManagerFactory
当我尝试使用 @Inject 注入时,出现以下错误: java.lang.IllegalStateException: 无法将 ejb UserRepository 的 ejbRef 转换为类类型的业务对象
我相信问题源于 JPA。我使用的配置与 JSF 应用程序使用的配置完全相同,该配置工作正常,因此我不知道问题可能是什么。连接池已正确设置并通过 GlassFish 正确执行 ping,我已将 wicket-weld 包含在类路径中,我什至尝试使用旧的 Java EE 5 wicketstuff 项目作为 wicketstuff-javaeeapi,得到相同的结果。
任何帮助将不胜感激。
I have an app using Wicket for the presentation layer with CDI/Weld, JPA 2.0, EJB 3.1 etc. (Java EE 6) deployed on GlassFish v3.0.1.
When I try to inject an EJB into a wicket page using @EJB I get the following error:
java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName
When I try to inject using @Inject, I get the following error:
java.lang.IllegalStateException: Unable to convert ejbRef for ejb UserRepository to a business object of type class
I believe the problem is stemming from JPA. I am using the exact same configuration that I used with a JSF application which worked properly, so I am lost as to what the issue could be. The connection pools are set up properly and pinging correctly through GlassFish, I have included wicket-weld on the classpath and I have even tried using the old Java EE 5 wicketstuff project for wicketstuff-javaeeapi with the same results.
Any help would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您遇到异常:
这可能意味着它没有检测到您的
persistence.xml
文件。确保它位于WEB-INF\classes\META-INF
目录中。您可以通过以下方式验证您的应用程序是否已启用 JPA:转至 GlassFish 中的管理控制台,转至“应用程序”部分,查看它是否为您的应用程序显示类似
[ejb, web,weld, jpa]
的内容。如果它没有显示jpa
,那么它就没有找到您的 JPA 配置文件。If you get the exception:
It might mean it is not detecting your
persistence.xml
file. Make sure it's in theWEB-INF\classes\META-INF
directory.You can verify that your app has JPA enabled by going to the Admin Console in GlassFish, go to the Applications section and see if it shows something like
[ejb, web, weld, jpa]
for your app. If it doesn't showjpa
then it's not finding your JPA config file.总是可以尝试通过标准的“java:global”名称查找 EJB。这至少应该让您排除检票口作为可能的问题来源,并使您更接近正常工作的系统。
Could always try to lookup the EJB via its standard "java:global" name. That should at least let you rule out wicket as a possible source of issues and get you a little closer to a working system.