gpt4 book ai didi

Java EE(开放)JPA - 无法检索 EntityManagerFactory

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:01 31 4
gpt4 key购买 nike

我正在使用以下命令设置一个 java EE 项目(打开)JPA。我使用 glassfish 4.0 作为我的应用程序服务器,但似乎无法让持久性发挥作用。

我面临的问题似乎是一个相当普遍的问题,因为同一错误的答案和解决方案有很大不同,该错误似乎是由很多不同的条件引起的。我已经尝试了我找到的大部分解决方案,不幸的是没有效果。

我正在尝试将 EntityManager 注入(inject)我的 DAO 之一

@Singleton
@Stateless
public class UserDAOJPAImpl implements UserDAO
{

@PersistenceContext(unitName = "pu")
private EntityManager em;

persistence.xml 使用 openJPA 作为提供程序,并且应该连接到 Glassfish 中我的 JDBC 资源,该资源使用 MySQL。配置似乎是正确的,因为 ping 测试成功。

我的 persistence.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

<persistence-unit name="pu" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/Kwetter</jta-data-source>
<class>kwetter.domain.Tweet</class>
<class>kwetter.domain.User</class>
</persistence-unit>
</persistence>

persistence.xml 文件位于 src/main/java/META-INF/persistence.xml

然而,一切似乎都注入(inject)得很好。当我开始使用 EntityManager 执行查询时,出现以下错误:

java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName pu
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:138)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTxRequiredCheck(EntityManagerWrapper.java:158)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTransactionScopedTxCheck(EntityManagerWrapper.java:151)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:281)
at kwetter.dao.UserDAOCollectionImpl.create(UserDAOCollectionImpl.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4695)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:630)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582)
at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4667)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4655)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
... 84 more
]]

我已多次检查所有设置,但似乎找不到此问题的原因。任何帮助将不胜感激。

最佳答案

正如 pL4Gu33 在评论中建议的那样,我的 persistence.xml 的位置似乎不正确。

我的 IDE (IntelliJ IDEA) 自动将 persistence.xml 文件放在 META-INF 文件夹下。但是,我需要在项目的资源文件夹下拥有 META-INF 文件夹。

更改 persistence.xml 文件的位置后加载 persistence.xml 文件:src/main/resources/META-INF/persistence.xml

关于Java EE(开放)JPA - 无法检索 EntityManagerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117377/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com