【发布时间】:2014-04-02 18:23:51
【问题描述】:
我正在设置一个 java EE 项目,使用 (打开)JPA。我使用 glassfish 4.0 作为我的应用程序服务器,但似乎无法让持久性工作。
我面临的问题似乎是一个相当普遍的问题,因为相同错误的答案和解决方案差异很大,错误似乎是由很多不同的条件引起的。我已经尝试了我找到的大多数解决方案,不幸的是没有成功。
我正在尝试将 EntityManager 注入我的一个 DAO 中
@Singleton
@Stateless
public class UserDAOJPAImpl implements UserDAO
{
@PersistenceContext(unitName = "pu")
private EntityManager em;
persistence.xml 使用 openJPA 作为提供程序,并且应该连接到我在 Glassfish 中使用 MySQL 的 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
]]
我已经多次检查了所有设置,但我似乎无法找到导致此问题的原因。任何帮助将不胜感激。
【问题讨论】:
-
你在使用 maven 吗?
-
你的代码没问题。似乎persistence.xml 在一个错误的地方。当我转移我的 persistence.xml 时,我也会遇到同样的异常。
标签: java jakarta-ee jpa glassfish openjpa