对于(Glassfish v2.1),来自会话bean的两个单独请求的两个RuntimeExceptions:
org.hibernate.SessionException:会话结束了!在org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1138) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67) wrapped javax.persistence.PersistenceException: org.hibernate.SessionException: Session已关闭!在org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)
org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:97) com.sun.enterprise.util.QueryWrapper.clearDelegates(QueryWrapper.java:460) at com.sun.enterprise.util.QueryWrapper.getResultList(QueryWrapper.java:198)的EntityManager关闭
这两个EntityManagers都是通过JNDI查找(java:comp:/env/TargetSitePersistenceContext)使用JTA (在persistence.xml中未定义事务类型属性)获得的。& Server 2008 w/ sqljdbc4.jar
代码只做ff:
query = entityManager.createQuery();
query.getResultList();就是这样。如果我没有弄错,我相信app容器将处理open/commit/rollback/close,所以我们不应该有任何entityManager.close()。
是什么原因导致了这两个运行时异常?
GF什么时候真正打开/关闭一个EntityManager?
在以下几个方面是否有任何区别:
发布于 2012-11-08 07:51:35
在所有条件相同的情况下,@PersistenceContext注入和JNDI查找应该返回相同的EntityManager。因此,它可能是GlassFish的一个bug,您可能想要找到它们。但是,请确保提供所有上下文,例如用于注入、事务处理等的会话bean类型。
发布于 2012-11-08 10:56:44
用注释@TransactionAttribute标记bean
@Stateless
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public class Repo implements IRepo
{ 容器管理事务由此参数调节。
https://stackoverflow.com/questions/13282242
复制相似问题