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 2008/04/30 14:58:41 UTC

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

Author: aadamchik
Date: Wed Apr 30 05:58:41 2008
New Revision: 652383

URL: http://svn.apache.org/viewvc?rev=652383&view=rev
Log:
CAY-1044 NPE on commit when the new object was deleted before commit

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextWriteTest.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=652383&r1=652382&r2=652383&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Wed Apr 30 05:58:41 2008
@@ -54,6 +54,7 @@
 CAY-1020 Problem accessing toMany Set relationships on client.
 CAY-1028 NPE's in the Modeler for incomplete relationships
 CAY-1043 NPE in ConnectionWrapper on rollback
+CAY-1044 NPE on commit when the new object was deleted before commit
 
 ----------------------------------
 Release: 3.0M3

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java?rev=652383&r1=652382&r2=652383&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java Wed Apr 30 05:58:41 2008
@@ -159,6 +159,12 @@
         final Persistent source = findObject(nodeId);
         final Persistent target = findObject(targetNodeId);
 
+        // if a target was later deleted, the diff for arcCreated is still preserved and
+        // can result in NULL target here.
+        if (target == null) {
+            return;
+        }
+
         ClassDescriptor descriptor = context.getEntityResolver().getClassDescriptor(
                 ((ObjectId) nodeId).getEntityName());
         ArcProperty property = (ArcProperty) descriptor.getProperty(arcId.toString());

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextWriteTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextWriteTest.java?rev=652383&r1=652382&r2=652383&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextWriteTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextWriteTest.java Wed Apr 30 05:58:41 2008
@@ -369,8 +369,7 @@
         Painting childMaster = childContext.newObject(Painting.class);
         childMaster.setPaintingTitle("Master");
 
-        PaintingInfo childDetail1 = childContext
-                .newObject(PaintingInfo.class);
+        PaintingInfo childDetail1 = childContext.newObject(PaintingInfo.class);
         childDetail1.setTextReview("Detail1");
         childDetail1.setPainting(childMaster);
 
@@ -543,4 +542,30 @@
             unblockQueries();
         }
     }
+
+    public void testAddRemove() {
+
+        DataContext context = createDataContext();
+        DataContext child = context.createChildDataContext();
+
+        Artist a = child.newObject(Artist.class);
+        a.setArtistName("X");
+        child.commitChanges();
+
+        Painting p1 = child.newObject(Painting.class);
+        p1.setPaintingTitle("P1");
+        a.addToPaintingArray(p1);
+
+        Painting p2 = child.newObject(Painting.class);
+        p2.setPaintingTitle("P2");
+        a.addToPaintingArray(p2);
+
+        a.removeFromPaintingArray(p2);
+
+        // this causes an error on commit
+        child.deleteObject(p2);
+
+        child.commitChangesToParent();
+
+    }
 }