|
From: <hib...@li...> - 2006-05-31 15:31:59
|
Author: epbernard
Date: 2006-05-31 11:31:49 -0400 (Wed, 31 May 2006)
New Revision: 9969
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java
Log:
ANN-356 Clear the PC on Rollback on RESOURCE_LOCAL Transactions
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java 2006-05-31 14:28:07 UTC (rev 9968)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java 2006-05-31 15:31:49 UTC (rev 9969)
@@ -80,9 +80,17 @@
throw new PersistenceException( "unexpected error when rollbacking", e );
}
finally {
+ try {
+ if (entityManager != null) {
+ Session session = ( (HibernateEntityManager) entityManager ).getSession();
+ if ( session != null && session.isOpen() ) session.clear();
+ }
+ }
+ catch (Throwable t) {
+ //we don't really care here since it's only for safety purpose
+ }
rollbackOnly = false;
}
- //if ( entityManager.isOpen() ) entityManager.adjustFlushMode();
}
public void setRollbackOnly() {
Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java
===================================================================
--- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java 2006-05-31 14:28:07 UTC (rev 9968)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java 2006-05-31 15:31:49 UTC (rev 9969)
@@ -202,9 +202,27 @@
catch (RollbackException e) {
//success
}
+ finally {
+ em.close();
+ }
}
+ public void testRollbackClearPC() throws Exception {
+ Book book = new Book();
+ book.name = "Stolen keys";
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+ em.persist( book );
+ em.getTransaction().commit();
+ em.getTransaction().begin();
+ book.name = "Recovered keys";
+ em.merge( book );
+ em.getTransaction().rollback();
+ assertEquals( "Stolen keys", em.find( Book.class, book.id ).name );
+ em.close();
+ }
+
public Class[] getAnnotatedClasses() {
return new Class[]{
Book.class
|