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 2011/04/08 07:27:13 UTC
svn commit: r1090117 - 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/
framework/cayenne-jd...
Author: aadamchik
Date: Fri Apr 8 05:27:13 2011
New Revision: 1090117
URL: http://svn.apache.org/viewvc?rev=1090117&view=rev
Log:
CAY-1444 NPE when persisting a newly instatiated object
patch by Dzmitry Kazimirchyk
some small edits + extra unit test by aadamchik
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/NullTestEntity.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/auto/_NullTestEntity.java
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/DataDomainInsertBucket.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCommitTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml
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=1090117&r1=1090116&r2=1090117&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 Fri Apr 8 05:27:13 2011
@@ -120,6 +120,7 @@ CAY-1500 MySQL JDBC Batching
Bug Fixes Since 3.0.1:
CAY-1403 Method "readNestedProperty" Should Resolve Through Iterative Invocations onto DataObject and Not Complete Within Cayenne.readNestedProperty
+CAY-1444 NPE when persisting a newly instatiated object
CAY-1456 Investigate auto-increment columns on DB2 and switch the adapter policy to support them
CAY-1484 Flattened attribute queries are incorrectly generated
CAY-1485 Memory information for about dialog
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java?rev=1090117&r1=1090116&r2=1090117&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java Fri Apr 8 05:27:13 2011
@@ -20,6 +20,7 @@
package org.apache.cayenne.access;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -79,6 +80,12 @@ class DataDomainInsertBucket extends Dat
Map<Object, Object> snapshot = diffBuilder.buildDBDiff(parent
.objectDiff(o.getObjectId()));
+ // we need to insert even if there is no changes to default values
+ // so creating an empty changes map
+ if (snapshot == null) {
+ snapshot = new HashMap<Object, Object>();
+ }
+
batch.add(snapshot, o.getObjectId());
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCommitTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCommitTest.java?rev=1090117&r1=1090116&r2=1090117&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCommitTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCommitTest.java Fri Apr 8 05:27:13 2011
@@ -22,6 +22,7 @@ package org.apache.cayenne.access;
import org.apache.cayenne.graph.GraphDiff;
import org.apache.cayenne.graph.MockGraphChangeHandler;
import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.testdo.testmap.NullTestEntity;
import org.apache.cayenne.testdo.testmap.Painting;
import org.apache.cayenne.unit.CayenneCase;
@@ -82,5 +83,18 @@ public class DataContextCommitTest exten
diff2.apply(diffChecker2);
assertEquals(1, diffChecker2.getCallbackCount());
assertSame(p.getObjectId(), newIds2[0]);
+
+ //commit new object with uninitialized attributes
+
+ context = createDataContext();
+
+ context.newObject(NullTestEntity.class);
+
+ assertTrue(context.hasChanges());
+
+ GraphDiff diff3 = context.flushToParent(true);
+ assertNotNull(diff3);
+ assertFalse(context.hasChanges());
+
}
}
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=1090117&r1=1090116&r2=1090117&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 Fri Apr 8 05:27:13 2011
@@ -46,6 +46,7 @@ import org.apache.cayenne.conn.PoolManag
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.graph.GraphDiff;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.EJBQLQuery;
import org.apache.cayenne.query.ObjectIdQuery;
@@ -60,6 +61,7 @@ import org.apache.cayenne.test.jdbc.DBHe
import org.apache.cayenne.test.jdbc.TableHelper;
import org.apache.cayenne.testdo.testmap.Artist;
import org.apache.cayenne.testdo.testmap.Exhibit;
+import org.apache.cayenne.testdo.testmap.NullTestEntity;
import org.apache.cayenne.testdo.testmap.Painting;
import org.apache.cayenne.testdo.testmap.ROArtist;
import org.apache.cayenne.unit.AccessStackAdapter;
@@ -723,6 +725,19 @@ public class DataContextTest extends Ser
assertEquals(PersistenceState.DELETED, hollow.getPersistenceState());
}
+ public void testCommitUnchangedInsert() throws Exception {
+
+ // see CAY-1444 - reproducible on DB's that support auto incremented PK
+
+ NullTestEntity newObject = context.newObject(NullTestEntity.class);
+
+ assertTrue(context.hasChanges());
+ context.commitChanges();
+ assertFalse(context.hasChanges());
+
+ assertEquals(PersistenceState.COMMITTED, newObject.getPersistenceState());
+ }
+
private void changeMaxConnections(int delta) {
PoolManager manager = (PoolManager) dataSource;
manager.setMaxConnections(manager.getMaxConnections() + delta);
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/NullTestEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/NullTestEntity.java?rev=1090117&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/NullTestEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/NullTestEntity.java Fri Apr 8 05:27:13 2011
@@ -0,0 +1,27 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.testdo.testmap;
+
+import org.apache.cayenne.testdo.testmap.auto._NullTestEntity;
+
+public class NullTestEntity extends _NullTestEntity {
+
+}
+
+
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/auto/_NullTestEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/auto/_NullTestEntity.java?rev=1090117&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/auto/_NullTestEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/testmap/auto/_NullTestEntity.java Fri Apr 8 05:27:13 2011
@@ -0,0 +1,24 @@
+package org.apache.cayenne.testdo.testmap.auto;
+
+import org.apache.cayenne.CayenneDataObject;
+
+/**
+ * Class _NullTestEntity was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _NullTestEntity extends CayenneDataObject {
+
+ public static final String NAME_PROPERTY = "name";
+
+ public static final String ID_PK_COLUMN = "ID";
+
+ public void setName(String name) {
+ writeProperty("name", name);
+ }
+ public String getName() {
+ return (String)readProperty("name");
+ }
+
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml?rev=1090117&r1=1090116&r2=1090117&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml Fri Apr 8 05:27:13 2011
@@ -208,6 +208,10 @@
<db-entity name="NO_PK_TEST">
<db-attribute name="ATTRIBUTE1" type="INTEGER"/>
</db-entity>
+ <db-entity name="NULL_TEST">
+ <db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isGenerated="true" isMandatory="true"/>
+ <db-attribute name="NAME" type="VARCHAR" length="100"/>
+ </db-entity>
<db-entity name="PAINTING">
<db-attribute name="ARTIST_ID" type="BIGINT"/>
<db-attribute name="ESTIMATED_PRICE" type="DECIMAL" length="10" scale="2"/>
@@ -448,6 +452,9 @@
<obj-entity name="NoPkTestEntity" className="org.apache.cayenne.testdo.testmap.NoPkTestEntity" dbEntityName="NO_PK_TEST">
<obj-attribute name="attribute1" type="java.lang.Integer" db-attribute-path="ATTRIBUTE1"/>
</obj-entity>
+ <obj-entity name="NullTestEntity" className="org.apache.cayenne.testdo.testmap.NullTestEntity" dbEntityName="NULL_TEST">
+ <obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
+ </obj-entity>
<obj-entity name="Painting" className="org.apache.cayenne.testdo.testmap.Painting" dbEntityName="PAINTING" superClassName="org.apache.cayenne.testdo.testmap.ArtDataObject">
<obj-attribute name="estimatedPrice" type="java.math.BigDecimal" db-attribute-path="ESTIMATED_PRICE"/>
<obj-attribute name="paintingDescription" type="java.lang.String" db-attribute-path="PAINTING_DESCRIPTION"/>