[hibernate-commits] Hibernate SVN: r10428 - branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Sep 1 17:39:34 EDT 2006


Author: steve.ebersole at jboss.com
Date: 2006-09-01 17:39:34 -0400 (Fri, 01 Sep 2006)
New Revision: 10428

Modified:
   branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
Log:
fixed failures on SQLServer

Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java	2006-09-01 21:39:19 UTC (rev 10427)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java	2006-09-01 21:39:34 UTC (rev 10428)
@@ -4,6 +4,8 @@
 import org.hibernate.Transaction;
 import org.hibernate.LockMode;
 import org.hibernate.StaleObjectStateException;
+import org.hibernate.exception.SQLGrammarException;
+import org.hibernate.dialect.SQLServerDialect;
 import org.hibernate.test.jpa.AbstractJPATest;
 import org.hibernate.test.jpa.Item;
 import org.hibernate.test.jpa.Part;
@@ -65,7 +67,12 @@
 		assertEquals( "encountered non-repeatable read", check, item2.getName() );
 		assertEquals( "encountered non-repeatable read", initialVersion, item2.getVersion() );
 
+		t1.commit();
+		s1.close();
+
 		// clean up
+		s1 = getSessions().openSession();
+		t1 = s1.beginTransaction();
 		s1.createQuery( "delete Item" ).executeUpdate();
 		t1.commit();
 		s1.close();
@@ -117,8 +124,25 @@
 		catch( StaleObjectStateException expected ) {
 			// this is the expected behavior
 		}
+		catch( SQLGrammarException t ) {
+			if ( getDialect() instanceof SQLServerDialect ) {
+				// sql-server (using snapshot isolation) reports this as a grammar exception /:)
+				//
+				// not to mention that it seems to "lose track" of the transaction in this scenario...
+				t1.rollback();
+				t1 = s1.beginTransaction();
+			}
+			else {
+				throw t;
+			}
+		}
 
+		t1.commit();
+		s1.close();
+
 		// clean up
+		s1 = getSessions().openSession();
+		t1 = s1.beginTransaction();
 		s1.createQuery( "delete Item" ).executeUpdate();
 		t1.commit();
 		s1.close();
@@ -159,8 +183,14 @@
 		assertTrue( part == part2 );
 		assertEquals( "encountered non-repeatable read", check, part2.getName() );
 
+		t1.commit();
+		s1.close();
+
 		// clean up
-		s1.delete( part );
+		s1 = getSessions().openSession();
+		t1 = s1.beginTransaction();
+		s1.delete( part2 );
+		s1.delete( part2.getItem() );
 		t1.commit();
 		s1.close();
 	}
@@ -202,14 +232,26 @@
 		assertEquals( "encountered non-repeatable read", check, part2.getName() );
 
 		// then acquire an UPGRADE lock; this should fail
-		s1.lock( part, LockMode.UPGRADE );
+		try {
+			s1.lock( part, LockMode.UPGRADE );
+		}
+		catch( Throwable t ) {
+			// SQLServer, for example, immediately throws an exception here...
+			t1.rollback();
+			t1 = s1.beginTransaction();
+		}
 		part2 = ( Part ) s1.get( Part.class, partId );
 		assertTrue( part == part2 );
 		assertEquals( "encountered non-repeatable read", check, part2.getName() );
 
+		t1.commit();
+		s1.close();
+
 		// clean up
-//		s1.refresh( item );
+		s1 = getSessions().openSession();
+		t1 = s1.beginTransaction();
 		s1.delete( part );
+		s1.delete( part.getItem() );
 		t1.commit();
 		s1.close();
 	}




More information about the hibernate-commits mailing list