From: <hib...@li...> - 2006-05-04 19:41:52
|
Author: epbernard Date: 2006-05-04 15:41:49 -0400 (Thu, 04 May 2006) New Revision: 9881 Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java Log: EJB-173 protect session.getTransaction() from session close Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-05-04 19:17:48 UTC (rev 9880) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-05-04 19:41:49 UTC (rev 9881) @@ -493,8 +493,11 @@ session.clear(); } } - JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction(); - joinable.resetStatus(); + if ( session.isOpen() ) { + //only reset if the session is opened since you can't get the Transaction otherwise + JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction(); + joinable.resetStatus(); + } } catch (HibernateException e) { throwPersistenceException( e ); Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java 2006-05-04 19:17:48 UTC (rev 9880) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java 2006-05-04 19:41:49 UTC (rev 9881) @@ -10,6 +10,7 @@ import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; +import org.hibernate.cfg.Environment; import org.hibernate.engine.SessionImplementor; /** @@ -64,8 +65,15 @@ public void afterCompletion(int i) { //TODO should I check for isOpen() ? if ( session != null ) { - log.debug( "Closing session after transaction completion" ); - session.close(); + if ( session.isOpen() ) { + log.debug( "Closing entity manager after transaction completion" ); + session.close(); + } + else { + log.warn( "Entity Manager closed by someone else (" + + Environment.AUTO_CLOSE_SESSION + + " must not be used)"); + } } //TODO session == null should not happen } |