Author: aadamchik
Date: Thu Feb 25 07:03:07 2010
New Revision: 916156

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

patch by Ksenia Khailenko

Modified:
    
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
    
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java
    
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java
    
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java

Modified: 
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=916156&r1=916155&r2=916156&view=diff
==============================================================================
--- 
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt 
(original)
+++ 
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt 
Thu Feb 25 07:03:07 2010
@@ -22,10 +22,11 @@
 CAY-1385 Modeler: error dialog doesn't show the correct version
 CAY-1390 DataRowStore.processRemoteEvent processInvalidatedIDs typo
 CAY-1396 merge: unneeded cast to SQLServerAdapter
+CAY-1397 ROP: Missing the COMMIT state when deleting HOLLOW object
 
 ----------------------------------
 Release: 3.0 RC 2
-Date: 
+Date: 5 February 2010
 ----------------------------------
 
 Changes/New Features Since 3.0RC1:

Modified: 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java?rev=916156&r1=916155&r2=916156&view=diff
==============================================================================
--- 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java
 (original)
+++ 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContextDeleteAction.java
 Thu Feb 25 07:03:07 2010
@@ -70,6 +70,11 @@
                             + context);
         }
 
+        // 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/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java?rev=916156&r1=916155&r2=916156&view=diff
==============================================================================
--- 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java
 (original)
+++ 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneContextTest.java
 Thu Feb 25 07:03:07 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/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java?rev=916156&r1=916155&r2=916156&view=diff
==============================================================================
--- 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java
 (original)
+++ 
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java
 Thu Feb 25 07:03:07 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());
+    }
+
 }


Reply via email to