Hibernate java.lang.IllegalStateException:EntityManager已关闭

Hibernate java.lang.IllegalStateException:EntityManager已关闭,hibernate,jboss,entitymanager,hibernate-entitymanager,Hibernate,Jboss,Entitymanager,Hibernate Entitymanager,我正在构建一个JAR文件,部署到JBoss 4.2.3.GA(情不自禁),使用Hibernate 4.1.5.SP1和validator 4.3.0.Final。数据库是MySQL 5.5。我在使用RESOURCE_LOCAL EntityManager执行基本选择时遇到问题。我有 for (final Order order : results) { ... try {

我正在构建一个JAR文件,部署到JBoss 4.2.3.GA(情不自禁),使用Hibernate 4.1.5.SP1和validator 4.3.0.Final。数据库是MySQL 5.5。我在使用RESOURCE_LOCAL EntityManager执行基本选择时遇到问题。我有

        for (final Order order : results) { 
        ...                 
                    try { 
                        session = (Session)em.getDelegate();
                        state = findStateByAbbrev(stateAbbrev, session);
                    } catch (HibernateException e) {
                        e.printStackTrace(System.err);
                        LOG.error(e.getMessage(), e);
                    } finally {
                        em.close();
                    }   // try 

        }   // for

private State findStateByAbbrev(final String abbrev, final Session session) {
    State ret = null;
    final Criteria crit = session.createCriteria(State.class).add(Restrictions.eq("abbrev", abbrev));
    final List<State> results = crit.list();
    if (results != null && results.size() > 0) {
        ret = results.get(0);
    }   // if
    return ret;
}
谢谢-戴夫

编辑:在我的代码运行时间超过$JBOSS_HOME/server/default//conf/JBOSS-service.xml中的设置之前,尝试Tiago的响应一直有效

四百

在我开始400秒后,我得到了下面的异常

21:41:40,025 WARN  [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_58] - Abort of action id -3f57ff9c:ca5e:502dadac:34 invoked while multiple threads active within it.
21:41:40,026 WARN  [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.CheckedAction_2] - CheckedAction::check - atomic action -3f57ff9c:ca5e:502dadac:34 aborting with 1 threads active!
21:41:40,410 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: null
21:41:40,410 ERROR [JDBCExceptionReporter] Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57ff9c:ca5e:502dadac:34 status: ActionStatus.ABORTED >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57ff9c:ca5e:502dadac:34 status: ActionStatus.ABORTED >)
21:41:40,412 ERROR [STDERR] org.hibernate.exception.GenericJDBCException: Cannot open connection
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
    at org.hibernate.loader.Loader.doQuery(Loader.java:673)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
    at org.mainco.subco.dido.service.OrderServiceImpl.findStateByAbbrev(OrderServiceImpl.java:450)
    at org.mainco.subco.dido.service.OrderServiceImpl.getPDOrders(OrderServiceImpl.java:144)
    at org.mainco.subco.dido.quartz.ProcessPDWorker.work(ProcessPDWorker.java:24)
    at org.mainco.subco.dido.quartz.ProcessPDJob.execute(ProcessPDJob.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
    at $Proxy83.execute(Unknown Source)
    at org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
21:41:40025警告[arjLoggerI18N][com.arjuna.ats.arjuna.coordinator.basicaction58]-操作id中止-3f57ff9c:ca5e:502dadac:34在其中多个线程处于活动状态时被调用。
21:41:40026警告[arjLoggerI18N][com.arjuna.ats.arjuna.coordinator.CheckedAction_2]-CheckedAction::check-atomic action-3f57ff9c:ca5e:502dadac:34正在中止,1个线程处于活动状态!
21:41:40410警告[JDBCExceptionReporter]SQL错误:0,SQLState:null
21:41:40410错误[JDBCExceptionReporter]事务未激活:tx=TransactionImple;-嵌套可丢弃:(javax.resource.ResourceException:事务未激活:tx=TransactionImple)
21:41:40412错误[STDERR]org.hibernate.exception.genericjdbception:无法打开连接
位于org.hibernate.exception.sqlstatecoverter.handlednonspecificeexception(sqlstatecoverter.java:103)
位于org.hibernate.exception.sqlstatecoverter.convert(sqlstatecoverter.java:91)
位于org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:43)
位于org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:29)
位于org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
位于org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
位于org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
位于org.hibernate.loader.loader.prepareQueryStatement(loader.java:1547)
位于org.hibernate.loader.loader.doQuery(loader.java:673)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:236)上
位于org.hibernate.loader.loader.doList(loader.java:2220)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2104)
位于org.hibernate.loader.loader.list(loader.java:2099)
位于org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
位于org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
位于org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
位于org.mainco.subco.dido.service.OrderServiceImpl.findStateByAbbrev(OrderServiceImpl.java:450)
位于org.mainco.subco.dido.service.OrderServiceImpl.getpOrders(OrderServiceImpl.java:144)
位于org.mainco.subco.dido.quartz.ProcessPDWorker.work(ProcessPDWorker.java:24)
位于org.mainco.subco.dido.quartz.ProcessPDJob.execute(ProcessPDJob.java:42)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
位于org.jboss.ejb3.interceptor.InvocationContextImpl.procedure(InvocationContextImpl.java:166)
位于org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.entity.TransactionScopeDentityManagerAcceptor.invoke(TransactionScopeDentityManagerAcceptor.java:54)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
在org.jboss.aspects.tx.TxPolicy.invokeincalertx(TxPolicy.java:126)上
位于org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
位于org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
位于org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
在$Proxy83.execute处执行(未知源)
位于org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
位于org.quartz.core.JobRunShell.run(JobRunShell.java:203)
位于org.quartz.siml.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)

您收到的错误仅仅是因为您在for循环中关闭了EntityManager。因此,当您第二次尝试调用
em.getDelegate()
时,您的em已经关闭。不,您不想手动关闭它。你会有这样的想法:

session = (Session)em.getDelegate();
for (final Order order : results) { 
        ...                 
                    try { 

                        state = findStateByAbbrev(stateAbbrev, session);
                    } catch (HibernateException e) {
                        e.printStackTrace(System.err);
                        LOG.error(e.getMessage(), e);
                    } 

        }   // for
至于超时的问题,可能您正面临JPA和Hibernate之间的一个常见问题。看一看,这可能对你有帮助。也许问题在于您从EM获取Hibernate会话的方式。同样,也是关于相同的问题


如果这些都没有帮助,只需在下面写一条评论,或者编辑你的问题,指定超时时间

在我达到JBoss中的超时限制之前,您的建议一直有效,在这一点上,我得到一个“Transaction is not active:”异常(如上所述)。我该怎么做
java.lang.IllegalStateException: EntityManager is closed
    at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:58)
    at org.mainco.subco.dido.service.OrderServiceImpl.getPDOrders(OrderServiceImpl.java:153)
    at org.mainco.subco.dido.quartz.ProcessPDWorker.work(ProcessPDWorker.java:24)
    at org.mainco.subco.dido.quartz.ProcessPDJob.execute(ProcessPDJob.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
    at $Proxy83.execute(Unknown Source)
    at org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
21:41:40,025 WARN  [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_58] - Abort of action id -3f57ff9c:ca5e:502dadac:34 invoked while multiple threads active within it.
21:41:40,026 WARN  [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.CheckedAction_2] - CheckedAction::check - atomic action -3f57ff9c:ca5e:502dadac:34 aborting with 1 threads active!
21:41:40,410 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: null
21:41:40,410 ERROR [JDBCExceptionReporter] Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57ff9c:ca5e:502dadac:34 status: ActionStatus.ABORTED >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57ff9c:ca5e:502dadac:34 status: ActionStatus.ABORTED >)
21:41:40,412 ERROR [STDERR] org.hibernate.exception.GenericJDBCException: Cannot open connection
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
    at org.hibernate.loader.Loader.doQuery(Loader.java:673)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
    at org.mainco.subco.dido.service.OrderServiceImpl.findStateByAbbrev(OrderServiceImpl.java:450)
    at org.mainco.subco.dido.service.OrderServiceImpl.getPDOrders(OrderServiceImpl.java:144)
    at org.mainco.subco.dido.quartz.ProcessPDWorker.work(ProcessPDWorker.java:24)
    at org.mainco.subco.dido.quartz.ProcessPDJob.execute(ProcessPDJob.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
    at $Proxy83.execute(Unknown Source)
    at org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
session = (Session)em.getDelegate();
for (final Order order : results) { 
        ...                 
                    try { 

                        state = findStateByAbbrev(stateAbbrev, session);
                    } catch (HibernateException e) {
                        e.printStackTrace(System.err);
                        LOG.error(e.getMessage(), e);
                    } 

        }   // for