[hibernate-commits] Hibernate SVN: r10282 - trunk/HibernateExt/ejb/src/java/org/hibernate/ejb

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Aug 18 11:17:03 EDT 2006


Author: epbernard
Date: 2006-08-18 11:17:00 -0400 (Fri, 18 Aug 2006)
New Revision: 10282

Modified:
   trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
   trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
   trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java
   trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java
Log:
EJB-215 some access to the session must not go through the entitymanager close flag check

Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java	2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java	2006-08-18 15:17:00 UTC (rev 10282)
@@ -300,8 +300,17 @@
 		}
 	}
 
+	/**
+	 * return a Session
+	 * @throws IllegalStateException if the entity manager is closed
+	 */
 	public abstract Session getSession();
 
+	/**
+	 * Return a Session (even if the entity manager is closed
+	 */
+	protected abstract Session getRawSession();
+
 	public EntityTransaction getTransaction() {
 		if ( transactionType == PersistenceUnitTransactionType.JTA ) {
 			throw new IllegalStateException( "JTA EntityManager cannot access a transactions" );
@@ -401,7 +410,7 @@
 	}
 
 	public boolean isTransactionInProgress() {
-		return ( (SessionImplementor) getSession() ).isTransactionInProgress();
+		return ( (SessionImplementor) getRawSession() ).isTransactionInProgress();
 	}
 
 	protected void markAsRollback() {
@@ -410,9 +419,10 @@
 			tx.setRollbackOnly();
 		}
 		else {
+			//no explicit use of the tx. boudaries methods
 			if ( PersistenceUnitTransactionType.JTA == transactionType ) {
 				TransactionManager transactionManager =
-						( (SessionFactoryImplementor) getSession().getSessionFactory() ).getTransactionManager();
+						( (SessionFactoryImplementor) getRawSession().getSessionFactory() ).getTransactionManager();
 				if ( transactionManager == null ) {
 					throw new PersistenceException(
 							"Using a JTA persistence context wo setting hibernate.transaction.manager_lookup_class"
@@ -442,7 +452,7 @@
 				final Transaction transaction = session.getTransaction();
 				if ( transaction != null && transaction instanceof JoinableCMTTransaction ) {
 					//can't handle it if not a joinnable transaction
-					final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) session.getTransaction();
+					final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) transaction;
 
 					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.JOINED ) {
 						log.debug( "Transaction already joined" );
@@ -580,7 +590,7 @@
 		if ( e instanceof StaleStateException ) {
 			if ( e instanceof StaleObjectStateException ) {
 				StaleObjectStateException sose = (StaleObjectStateException) e;
-				Object entity = getSession().load( sose.getEntityName(), sose.getIdentifier() );
+				Object entity = getRawSession().load( sose.getEntityName(), sose.getIdentifier() );
 				throwPersistenceException( new OptimisticLockException(	null, e, entity ) );
 			}
 			else {

Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java	2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java	2006-08-18 15:17:00 UTC (rev 10282)
@@ -45,6 +45,10 @@
 		return s;
 	}
 
+	protected Session getRawSession() {
+		return getSession();
+	}
+
 	public void close() {
 		throw new UnsupportedOperationException( "cannot close the JTA-bound EntityManager" );
 	}
@@ -53,7 +57,7 @@
 		//TODO Hum contradictory comments, I'm getting mad
 		//no need to force enlistment in the tx, a current session is always enlisted
 		//adjustFlushMode(); //don't adjust, can't be done on closed EM
-		getSession().isOpen(); //to force enlistment in tx
+		getRawSession().isOpen(); //to force enlistment in tx
 		return true;
 	}
 

Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java	2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java	2006-08-18 15:17:00 UTC (rev 10282)
@@ -40,16 +40,17 @@
 	public Session getSession() {
 
 		if ( !open ) throw new IllegalStateException( "EntityManager is closed" );
+		return getRawSession();
+	}
 
+	protected Session getRawSession() {
 		if ( session == null ) {
 			session = sessionFactory.openSession();
 			if ( persistenceContextType == PersistenceContextType.TRANSACTION ) {
 				( (SessionImplementor) session ).setAutoClear( true );
 			}
 		}
-
 		return session;
-
 	}
 
 	public void close() {
@@ -64,7 +65,6 @@
 						}
 
 						public void afterCompletion(int i) {
-							//TODO should I check for isOpen() ?
 							if ( session != null ) {
 								if ( session.isOpen() ) {
 									log.debug( "Closing entity manager after transaction completion" );

Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java	2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java	2006-08-18 15:17:00 UTC (rev 10282)
@@ -82,7 +82,7 @@
 		finally {
 			try {
 				if (entityManager !=  null) {
-					Session session = ( (HibernateEntityManager) entityManager ).getSession();
+					Session session = getSession();
 					if ( session != null && session.isOpen() ) session.clear();
 				}
 			}




More information about the hibernate-commits mailing list