Author: allee8285
Date: Mon Oct 12 16:17:34 2009
New Revision: 824406

URL: http://svn.apache.org/viewvc?rev=824406&view=rev
Log:
OPENJPA-1344 Add checks for needed exception conditions.

Modified:
    
openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestEmLockMode.java
    
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

Modified: 
openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestEmLockMode.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestEmLockMode.java?rev=824406&r1=824405&r2=824406&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestEmLockMode.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestEmLockMode.java
 Mon Oct 12 16:17:34 2009
@@ -20,6 +20,7 @@
 
 import javax.persistence.EntityManager;
 import javax.persistence.LockModeType;
+import javax.persistence.TransactionRequiredException;
 
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
 import org.apache.openjpa.jdbc.kernel.JDBCFetchConfigurationImpl;
@@ -261,4 +262,52 @@
 
         assertEquals(beforeIsolation, fConfig.getIsolation());
     }
+
+    /*
+     * Test em.getLockMode();
+     */
+    public void testGetLockMode() {
+        EntityManager em = emf.createEntityManager();
+
+        LockEmployee employee = em.find(LockEmployee.class, 1);
+        try {
+            em.getLockMode(employee);
+            fail("Expecting TransactionRequiredException.");
+        } catch (TransactionRequiredException tre) {
+        } catch (Exception e){
+            fail("Expecting TransactionRequiredException.");
+        }
+
+        em.getTransaction().begin();
+        try {
+            assertEquals("getLockMode only allows in 
transaction.",LockModeType.NONE, em.getLockMode(employee));
+        } catch (Exception e){
+            fail("Do not expecting any exception.");
+        }        
+        em.getTransaction().rollback();
+
+        em.clear();
+        em.getTransaction().begin();
+        try {
+            // getLockMode on a detached entity;
+            em.getLockMode(employee);
+            fail("Expecting IllegalArgumentException for getLockMode on a 
detached entity in an active transaction.");
+        } catch (IllegalArgumentException iae) {
+        } catch (Exception e){
+            fail("Expecting IllegalArgumentException for getLockMode on a 
detached entity in an active transaction.");
+        }        
+        em.getTransaction().rollback();
+
+        em.getTransaction().begin();
+        try {
+            employee = em.find(LockEmployee.class, 1, 
LockModeType.PESSIMISTIC_WRITE);
+            assertEquals("Test getLockMode on non-NONE lock mode type.", 
LockModeType.PESSIMISTIC_WRITE, em
+                    .getLockMode(employee));
+        } catch (Exception e){
+            fail("Do not expecting any exception.");
+        }        
+        em.getTransaction().rollback();
+
+        em.close();
+    }
 }

Modified: 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=824406&r1=824405&r2=824406&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
 Mon Oct 12 16:17:34 2009
@@ -1124,6 +1124,8 @@
 
     public LockModeType getLockMode(Object entity) {
         assertNotCloseInvoked();
+        _broker.assertActiveTransaction();
+        assertValidAttchedEntity(entity);
         return MixedLockLevelsHelper.fromLockLevel(
             _broker.getLockLevel(entity));
     }


Reply via email to