You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/02/25 08:04:58 UTC

svn commit: r916158 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/ test/java/org/apache/cayenne/ test/java/org/apache/cayenne/access/

Author: aadamchik
Date: Thu Feb 25 07:04:58 2010
New Revision: 916158

URL: http://svn.apache.org/viewvc?rev=916158&view=rev
Log:
CAY-1397 ROP: Missing the COMMIT state when deleting HOLLOW object

patch by Ksenia Khailenko
(my previous trunk commit didn't have the actual patch)

(cherry picked from commit b0cafdd188d903ba213e5faf8f233e710c0f3905)

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java?rev=916158&r1=916157&r2=916158&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java Thu Feb 25 07:04:58 2010
@@ -79,6 +79,11 @@
 
         context.prepareForAccess(object, null, false);
 
+        // must resolve HOLLOW objects before delete... needed
+        // to process relationships and optimistic locking...
+
+        context.prepareForAccess(object, null, false);
+        
         if (oldState == PersistenceState.NEW) {
             deleteNew(object);
         }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java?rev=916158&r1=916157&r2=916158&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java Thu Feb 25 07:04:58 2010
@@ -326,5 +326,32 @@
                 .getGlobalAttribute1Direct());
         assertEquals(PersistenceState.COMMITTED, hollow.getPersistenceState());
     }
+    
+    public void testBeforeHollowDeleteShouldChangeStateToCommited() {
+
+        ObjectId gid = new ObjectId("MtTable1", "a", "b");
+        final ClientMtTable1 inflated = new ClientMtTable1();
+        inflated.setPersistenceState(PersistenceState.COMMITTED);
+        inflated.setObjectId(gid);
+        inflated.setGlobalAttribute1("abc");
+
+        MockClientConnection connection = new MockClientConnection(new GenericResponse(
+                Arrays.asList(inflated)));
+        ClientChannel channel = new ClientChannel(connection);
+
+        CayenneContext context = new CayenneContext(channel);
+        context.setEntityResolver(getDomain()
+                .getEntityResolver()
+                .getClientEntityResolver());
+        ClientMtTable1 hollow = (ClientMtTable1) context.localObject(gid, null);
+        assertEquals(PersistenceState.HOLLOW, hollow.getPersistenceState());
+
+        // testing this...
+        context.deleteObject(hollow);
+        assertSame(hollow, context.getGraphManager().getNode(gid));
+        assertEquals(inflated.getGlobalAttribute1Direct(), hollow
+                .getGlobalAttribute1Direct());
+        assertEquals(PersistenceState.DELETED, hollow.getPersistenceState());
+    }
 
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java?rev=916158&r1=916157&r2=916158&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java Thu Feb 25 07:04:58 2010
@@ -536,4 +536,23 @@
         assertNull(context.getObjectStore().getCachedSnapshot(oid));
         assertSame(object, context.getObjectStore().getNode(oid));
     }
+    
+    public void testBeforeHollowDeleteShouldChangeStateToCommited() throws Exception {
+        ObjectId gid = new ObjectId("Artist","ARTIST_ID",33001);  
+        final Artist inflated = new Artist();
+        inflated.setPersistenceState(PersistenceState.COMMITTED);
+        inflated.setObjectId(gid);
+        inflated.setArtistName("artist1");
+        
+        Artist hollow = (Artist) context.localObject(gid, null);
+        assertEquals(PersistenceState.HOLLOW, hollow.getPersistenceState());
+
+        // testing this...
+        context.deleteObject(hollow);
+        assertSame(hollow, context.getGraphManager().getNode(gid));
+        assertEquals(inflated.getArtistName(), hollow.getArtistName());
+          
+        assertEquals(PersistenceState.DELETED, hollow.getPersistenceState());
+    }
+
 }