Author: dwoods
Date: Thu Apr 8 02:15:59 2010
New Revision: 931756
URL: http://svn.apache.org/viewvc?rev=931756&view=rev
Log:
OPENJPA-1602: check in test case from trunk r931628 by Fay
Modified:
openjpa/branches/2.0.x/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestPessimisticLocks.java
Modified:
openjpa/branches/2.0.x/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestPessimisticLocks.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestPessimisticLocks.java?rev=931756&r1=931755&r2=931756&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestPessimisticLocks.java
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestPessimisticLocks.java
Thu Apr 8 02:15:59 2010
@@ -334,6 +334,31 @@ public class TestPessimisticLocks extend
em2.close();
}
+ /*
+ * Test multiple execution of the same query with pessimistic lock.
+ */
+ public void testRepeatedQueryWithPessimisticLocks() {
+ EntityManager em = emf.createEntityManager();
+ resetSQL();
+ em.getTransaction().begin();
+ String jpql = "select e.firstName from Employee e where e.id = 1";
+ Query q1 = em.createQuery(jpql);
+ q1.setLockMode(LockModeType.PESSIMISTIC_WRITE);
+ String firstName1 = (String) q1.getSingleResult();
+ //Expected sql for Derby is:
+ //SELECT t0.firstName FROM Employee t0 WHERE (t0.id = CAST(? AS
BIGINT)) FOR UPDATE WITH RR
+ String SQL1 = toString(sql);
+
+ // run the second time
+ resetSQL();
+ Query q2 = em.createQuery(jpql);
+ q2.setLockMode(LockModeType.PESSIMISTIC_WRITE);
+ String firstName2 = (String) q2.getSingleResult();
+ String SQL2 = toString(sql);
+ assertEquals(SQL1, SQL2);
+ em.getTransaction().commit();
+ }
+
/**
* Assert that an exception of proper type has been thrown. Also checks
that
* that the exception has populated the failed object.