[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