|
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
}
|