我正在使用设置java EE项目 (打开)JPA。我正在使用glassfish 4.0作为我的应用程序服务器,但似乎无法使持久性工作。
我面临的问题似乎是一个相当普遍的问题,因为同一错误的答案和解决方案差别很大,错误似乎是由很多不同的条件造成的。我已经尝试了我发现的大部分解决方案,遗憾的是无济于事。
我正在尝试将EntityManager注入我的一个DAO
中@Singleton
@Stateless
public class UserDAOJPAImpl implements UserDAO
{
@PersistenceContext(unitName = "pu")
private EntityManager em;
persistence.xml使用openJPA作为提供程序,并且应该连接到使用MySQL的Glassfish中的JDBC资源。配置似乎是正确的,因为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
下 然而,似乎一切似乎都很好。当我使用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
]]
我已经多次完成了所有设置,但我似乎无法找到导致此问题的原因。任何帮助将不胜感激。
答案 0 :(得分:0)
正如评论中提到的pL4Gu33,我的persistence.xml的位置似乎不正确。
我的IDE(IntelliJ IDEA)自动将persistence.xml文件放在META-INF文件夹下。但是,我需要将META-INF文件夹放在项目的资源文件夹下。
在更改persistence.xml文件的位置后加载persistence.xml文件: src / main / resources / META-INF / persistence.xml 。