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 |