From e3be88bf7ef8c5a101875d1a1c63ef2832fa8c42 Mon Sep 17 00:00:00 2001 From: Albert Lee Date: Tue, 22 Feb 2011 23:15:01 +0000 Subject: [PATCH] Fix test cases running in DB2 due to 1) dict.forUpdateClause must be obtained after emf is created because specific dictionary may override the value of this attribute, 2) The forUpdateClause in DB2 is LockMode type dependent, (i.e. WITH RR/RS) therefore can not depends on this attribute for positive test case comparison, negative test ok. git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@1073542 13f79535-47bb-0310-9956-ffa450edef68 --- .../persistence/lockmgr/LockEmployee.java | 2 +- .../lockmgr/TestNamedQueryLockMode.java | 17 ++++++++++++----- .../TestOptimisticNamedQueryLockMode.java | 6 ++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/LockEmployee.java b/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/LockEmployee.java index a58ea2a32..d691c778a 100644 --- a/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/LockEmployee.java +++ b/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/LockEmployee.java @@ -34,7 +34,7 @@ import javax.persistence.Version; @NamedQuery(name = "findEmployeeById", query = "SELECT c FROM LockEmployee c WHERE c.id = :id"), @NamedQuery(name = "findEmployeeByIdWithLock", - query = "SELECT c FROM LockEmployee c WHERE c.id = :id", lockMode = LockModeType.PESSIMISTIC_READ), + query = "SELECT c FROM LockEmployee c WHERE c.id = :id", lockMode = LockModeType.PESSIMISTIC_WRITE), @NamedQuery(name = "findEmployeeByIdWithNoLock", query = "SELECT c FROM LockEmployee c WHERE c.id = :id", lockMode = LockModeType.NONE) }) @Entity diff --git a/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestNamedQueryLockMode.java b/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestNamedQueryLockMode.java index f727a3126..54ee89da6 100644 --- a/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestNamedQueryLockMode.java +++ b/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestNamedQueryLockMode.java @@ -22,6 +22,7 @@ import javax.persistence.EntityManager; import javax.persistence.LockModeType; import javax.persistence.Query; +import org.apache.openjpa.jdbc.sql.DB2Dictionary; import org.apache.openjpa.persistence.FetchPlan; import org.apache.openjpa.persistence.OpenJPAEntityManager; import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI; @@ -44,12 +45,12 @@ public class TestNamedQueryLockMode extends SQLListenerTestCase { "openjpa.LockManager", "pessimistic", "openjpa.Optimistic", "false" ); - lockClause = getForUpdateClause(); } public void testForUpdateClausePresentInNamedQueryWithLockMode() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); + lockClause = getForUpdateClause(); assertClausePresentInSQL(lockClause, em.createNamedQuery("findEmployeeByIdWithLock").setParameter("id", 0)); em.getTransaction().rollback(); em.getTransaction().begin(); @@ -75,8 +76,13 @@ public class TestNamedQueryLockMode extends SQLListenerTestCase { public void testForUpdateClausePresentInQueryWithDefault() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); - assertClausePresentInSQL(lockClause, em.createNamedQuery("findEmployeeById").setParameter("id", 0)); - assertClausePresentInSQL(lockClause, em.createNamedQuery("findEmployeeById").setParameter("id", 0)); + lockClause = getForUpdateClause(); + if (!DB2Dictionary.class.isAssignableFrom(getDBDictionary().getClass())) { + // Skip test because "for update" clause in DB2 depends on LockMode type (i.e. WITH RR/RS) + // plus dict.forUpdateClause is not sensitive to this implementation. + assertClausePresentInSQL(lockClause, em.createNamedQuery("findEmployeeById").setParameter("id", 0)); + assertClausePresentInSQL(lockClause, em.createNamedQuery("findEmployeeById").setParameter("id", 0)); + } OpenJPAEntityManager oem = (OpenJPAEntityManager)em; OpenJPAQuery q = oem.createNamedQuery("findEmployeeById").setParameter("id", 0); @@ -88,8 +94,8 @@ public class TestNamedQueryLockMode extends SQLListenerTestCase { public void testForUpdateClauseAbsentInQueryWithFetchPlanNoneLockMode() { OpenJPAEntityManagerSPI em = emf.createEntityManager(); - em.getTransaction().begin(); - + em.getTransaction().begin(); + lockClause = getForUpdateClause(); OpenJPAQuery q = em.createNamedQuery("findEmployeeById").setParameter("id", 0); FetchPlan fp = q.getFetchPlan(); fp.setReadLockMode(LockModeType.NONE); @@ -107,6 +113,7 @@ public class TestNamedQueryLockMode extends SQLListenerTestCase { public void testForUpdateClauseAbsentInQueryWithExplictNoLock() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); + lockClause = getForUpdateClause(); assertClauseAbsentInSQL(lockClause, em.createNamedQuery("findEmployeeByIdWithNoLock").setParameter("id", 0)); assertClauseAbsentInSQL(lockClause, em.createNamedQuery("findEmployeeByIdWithNoLock").setParameter("id", 0)); em.getTransaction().commit(); diff --git a/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestOptimisticNamedQueryLockMode.java b/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestOptimisticNamedQueryLockMode.java index 4c549e9c4..d6d437da1 100644 --- a/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestOptimisticNamedQueryLockMode.java +++ b/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestOptimisticNamedQueryLockMode.java @@ -39,7 +39,6 @@ public class TestOptimisticNamedQueryLockMode extends SQLListenerTestCase { super.setUp(CLEAR_TABLES, LockEmployee.class, "openjpa.LockManager", "pessimistic" ); - lockClause = getForUpdateClause(); } /* @@ -47,6 +46,7 @@ public class TestOptimisticNamedQueryLockMode extends SQLListenerTestCase { */ public void testForUpdateClausePresentInNamedQueryWithLockMode() { EntityManager em = emf.createEntityManager(); + lockClause = getForUpdateClause(); em.getTransaction().begin(); assertClausePresentInSQL(lockClause, em.createNamedQuery("findEmployeeByIdWithLock").setParameter("id", 0)); em.getTransaction().rollback(); @@ -65,6 +65,7 @@ public class TestOptimisticNamedQueryLockMode extends SQLListenerTestCase { public void testForUpdateClausePresentInQueryWithDefault() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); + lockClause = getForUpdateClause(); assertClauseAbsentInSQL(lockClause, em.createNamedQuery("findEmployeeById").setParameter("id", 0)); assertClauseAbsentInSQL(lockClause, em.createNamedQuery("findEmployeeById").setParameter("id", 0)); @@ -83,7 +84,7 @@ public class TestOptimisticNamedQueryLockMode extends SQLListenerTestCase { public void testForUpdateClauseAbsentInQueryWithFetchPlanNoneLockMode() { OpenJPAEntityManagerSPI em = emf.createEntityManager(); em.getTransaction().begin(); - + lockClause = getForUpdateClause(); OpenJPAQuery q = em.createNamedQuery("findEmployeeById").setParameter("id", 0); FetchPlan fp = q.getFetchPlan(); fp.setReadLockMode(LockModeType.NONE); @@ -104,6 +105,7 @@ public class TestOptimisticNamedQueryLockMode extends SQLListenerTestCase { public void testForUpdateClauseAbsentInQueryWithExplictNoLock() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); + lockClause = getForUpdateClause(); assertClauseAbsentInSQL(lockClause, em.createNamedQuery("findEmployeeByIdWithNoLock").setParameter("id", 0)); assertClauseAbsentInSQL(lockClause, em.createNamedQuery("findEmployeeByIdWithNoLock").setParameter("id", 0)); em.getTransaction().commit();