You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2010/03/16 17:32:14 UTC

svn commit: r923849 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/ openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/ openjpa-persistence/src/main/java/org/apache/openjp...

Author: jrbauer
Date: Tue Mar 16 16:32:14 2010
New Revision: 923849

URL: http://svn.apache.org/viewvc?rev=923849&view=rev
Log:
OPENJPA-1562 Committing code and test updates contributed by Dianne Richards.  Refresh after remove was not throwing exception dictated by spec.

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
    openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestMixedLockManagerRefreshException.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java?rev=923849&r1=923848&r2=923849&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java Tue Mar 16 16:32:14 2010
@@ -116,6 +116,23 @@ public class TestRefresh extends SingleE
         assertEquals(mode, CacheStoreMode.USE);
     }
     
+    public void testRefreshAfterRemove() {
+        try {
+            em.getTransaction().begin();
+            Item item = new Item();
+            item.setItemData("Test Data");
+            em.persist(item);
+            em.flush();
+            em.remove(item);
+            em.flush();
+            em.refresh(item);
+            em.getTransaction().commit();
+            fail("Did not catch expected IllegalArgumentException for refresh() of removed entity");
+        } catch (IllegalArgumentException e) {
+            // Expected exception
+        }
+    }
+    
     
     void assertCached(Class<?> cls, Object oid) {
         assertTrue(cls + ":" + oid + " should be in L2 cache, but not", emf.getCache().contains(cls, oid));

Modified: openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestMixedLockManagerRefreshException.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestMixedLockManagerRefreshException.java?rev=923849&r1=923848&r2=923849&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestMixedLockManagerRefreshException.java (original)
+++ openjpa/trunk/openjpa-persistence-locking/src/test/java/org/apache/openjpa/persistence/lockmgr/TestMixedLockManagerRefreshException.java Tue Mar 16 16:32:14 2010
@@ -255,28 +255,28 @@ public class TestMixedLockManagerRefresh
             {Act.Remove},
 
             {Act.Refresh, 1, LockModeType.NONE },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
       
             {Act.Refresh, 1, LockModeType.READ },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
 
             {Act.Refresh, 1, LockModeType.WRITE },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
 
             {Act.Refresh, 1, LockModeType.OPTIMISTIC },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
 
             {Act.Refresh, 1, LockModeType.OPTIMISTIC_FORCE_INCREMENT },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
 
             {Act.Refresh, 1, LockModeType.PESSIMISTIC_READ },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
 
             {Act.Refresh, 1, LockModeType.PESSIMISTIC_WRITE },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
 
             {Act.Refresh, 1, LockModeType.PESSIMISTIC_FORCE_INCREMENT },
-            {Act.TestException},
+            {Act.TestException, 1, IllegalArgumentException.class },
             
             {Act.RollbackTx},
         };

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=923849&r1=923848&r2=923849&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 Tue Mar 16 16:32:14 2010
@@ -101,6 +101,10 @@ public class EntityManagerImpl
 
     private static final Localizer _loc = Localizer.forPackage(EntityManagerImpl.class);
     private static final Object[] EMPTY_OBJECTS = new Object[0];
+    
+    private static final String GET_LOCK_MODE = "getLockMode";
+    private static final String LOCK = "lock";
+    private static final String REFRESH = "refresh";
 
     private DelegatingBroker _broker;
     private EntityManagerFactoryImpl _emf;
@@ -742,7 +746,7 @@ public class EntityManagerImpl
 
     public void refresh(Object entity, LockModeType mode, Map<String, Object> properties) {
         assertNotCloseInvoked();
-        assertValidAttchedEntity("refresh", entity);
+        assertValidAttchedEntity(REFRESH, entity);
 
         _broker.assertWriteOperation();
         configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
@@ -1144,7 +1148,7 @@ public class EntityManagerImpl
     public LockModeType getLockMode(Object entity) {
         assertNotCloseInvoked();
         _broker.assertActiveTransaction();
-        assertValidAttchedEntity("getLockMode", entity);
+        assertValidAttchedEntity(GET_LOCK_MODE, entity);
         return MixedLockLevelsHelper.fromLockLevel(
             _broker.getLockLevel(entity));
     }
@@ -1155,13 +1159,13 @@ public class EntityManagerImpl
 
     public void lock(Object entity) {
         assertNotCloseInvoked();
-        assertValidAttchedEntity("lock", entity);
+        assertValidAttchedEntity(LOCK, entity);
         _broker.lock(entity, this);
     }
 
     public void lock(Object entity, LockModeType mode, int timeout) {
         assertNotCloseInvoked();
-        assertValidAttchedEntity("lock", entity);
+        assertValidAttchedEntity(LOCK, entity);
 
         configureCurrentFetchPlan(pushFetchPlan(), null, mode, false);
         try {
@@ -1173,7 +1177,7 @@ public class EntityManagerImpl
 
     public void lock(Object entity, LockModeType mode, Map<String, Object> properties) {
         assertNotCloseInvoked();
-        assertValidAttchedEntity("lock", entity);
+        assertValidAttchedEntity(LOCK, entity);
         _broker.assertActiveTransaction();
         configureCurrentCacheModes(getFetchPlan(), properties);
         configureCurrentFetchPlan(pushFetchPlan(), properties, mode, false);
@@ -1341,7 +1345,7 @@ public class EntityManagerImpl
      */
     void assertValidAttchedEntity(String call, Object entity) {
         OpenJPAStateManager sm = _broker.getStateManager(entity);
-        if (sm == null || !sm.isPersistent() || sm.isDetached()) {
+        if (sm == null || !sm.isPersistent() || sm.isDetached() || (call.equals(REFRESH) && sm.isDeleted())) {
             throw new IllegalArgumentException(_loc.get("invalid_entity_argument", 
                 call, entity == null ? "null" : Exceptions.toString(entity)).getMessage());
         }