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 2016/08/12 15:18:19 UTC

[1/2] cayenne git commit: CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name

Repository: cayenne
Updated Branches:
  refs/heads/STABLE-3.1 83ca8fe44 -> 45e413de0


CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name

* unit tests
* integration tests
* the fix


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/5e92ab99
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/5e92ab99
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/5e92ab99

Branch: refs/heads/STABLE-3.1
Commit: 5e92ab996e2f22ece77d3f6bba9d6431f10fadcd
Parents: 83ca8fe
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Fri Aug 12 17:15:56 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Fri Aug 12 18:14:12 2016 +0300

----------------------------------------------------------------------
 framework/cayenne-jdk1.5-unpublished/pom.xml    | 10 +++++-
 .../org/apache/cayenne/access/DataContext.java  | 22 ++++++------
 .../apache/cayenne/access/ObjectResolver.java   | 30 +++++++++++-----
 ...ataContextObjectIdQuery_PolymorphicTest.java | 36 ++++++++++++++++++--
 4 files changed, 74 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/5e92ab99/framework/cayenne-jdk1.5-unpublished/pom.xml
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/pom.xml b/framework/cayenne-jdk1.5-unpublished/pom.xml
index f201c57..9f8789f 100644
--- a/framework/cayenne-jdk1.5-unpublished/pom.xml
+++ b/framework/cayenne-jdk1.5-unpublished/pom.xml
@@ -239,6 +239,14 @@
 					</execution>
 				</executions>
 			</plugin>
-		</plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.6</source>
+                    <target>1.6</target>
+                </configuration>
+            </plugin>
+        </plugins>
 	</build>
 </project>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5e92ab99/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
index f8b8947..1e725c3 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
@@ -19,16 +19,6 @@
 
 package org.apache.cayenne.access;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.cayenne.BaseContext;
 import org.apache.cayenne.CayenneException;
 import org.apache.cayenne.CayenneRuntimeException;
@@ -44,7 +34,6 @@ import org.apache.cayenne.QueryResponse;
 import org.apache.cayenne.access.util.IteratedSelectObserver;
 import org.apache.cayenne.cache.NestedQueryCache;
 import org.apache.cayenne.configuration.CayenneRuntime;
-import org.apache.cayenne.configuration.RuntimeProperties;
 import org.apache.cayenne.event.EventManager;
 import org.apache.cayenne.graph.ChildDiffLoader;
 import org.apache.cayenne.graph.CompoundDiff;
@@ -67,6 +56,16 @@ import org.apache.cayenne.util.EventUtil;
 import org.apache.cayenne.util.GenericResponse;
 import org.apache.cayenne.util.Util;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 /**
  * The most common implementation of {@link ObjectContext}. DataContext is an isolated
  * container of an object graph, in a sense that any uncommitted changes to persistent
@@ -328,6 +327,7 @@ public class DataContext extends BaseContext {
         final ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
                 entity.getName());
         final DataRow snapshot = new DataRow(10);
+        snapshot.setEntityName(entity.getName());
 
         descriptor.visitProperties(new PropertyVisitor() {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5e92ab99/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectResolver.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectResolver.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectResolver.java
index a9db1da..1d46af6 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectResolver.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectResolver.java
@@ -19,12 +19,6 @@
 
 package org.apache.cayenne.access;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataObject;
 import org.apache.cayenne.DataRow;
@@ -37,6 +31,14 @@ import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.reflect.ClassDescriptor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * DataRows-to-objects converter for a specific ObjEntity.
@@ -45,6 +47,8 @@ import org.apache.cayenne.reflect.ClassDescriptor;
  */
 class ObjectResolver {
 
+    private static final Log LOGGER = LogFactory.getLog(ObjectResolver.class);
+
     DataContext context;
     ClassDescriptor descriptor;
     Collection<DbAttribute> primaryKey;
@@ -275,9 +279,17 @@ class ObjectResolver {
         public final ClassDescriptor descriptorForRow(DataRow row) {
             String entityName = row.getEntityName();
 
-            // null probably means that inheritance qualifiers are messed up
-            return (entityName != null) ? context.getEntityResolver().getClassDescriptor(
-                    entityName) : descriptor;
+            // null either means a bug in Cayenne (e.g. CAY-2101) or the inheritance qualifiers are messed up
+            if(entityName == null) {
+
+                if(LOGGER.isWarnEnabled()) {
+                    LOGGER.warn("** Null entity name for DataRow, can't resolve sub descriptor for "
+                            + descriptor.getEntity().getName());
+                    return descriptor;
+                }
+            }
+
+            return context.getEntityResolver().getClassDescriptor(entityName);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5e92ab99/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
index 13375c8..1805274 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
@@ -1,8 +1,5 @@
 package org.apache.cayenne.access;
 
-import java.sql.SQLException;
-import java.sql.Types;
-
 import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.di.Inject;
@@ -10,12 +7,16 @@ import org.apache.cayenne.query.ObjectIdQuery;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.inherit.AbstractPerson;
+import org.apache.cayenne.testdo.inherit.Employee;
 import org.apache.cayenne.testdo.inherit.Manager;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestClosure;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 
+import java.sql.SQLException;
+import java.sql.Types;
+
 @UseServerRuntime(ServerCase.PEOPLE_PROJECT)
 public class DataContextObjectIdQuery_PolymorphicTest extends ServerCase {
 
@@ -84,4 +85,33 @@ public class DataContextObjectIdQuery_PolymorphicTest extends ServerCase {
 			}
 		});
 	}
+
+	public void testPolymorphicSharedCache_AfterCayenneInsert() throws SQLException {
+
+
+		// see CAY-2101... we are trying to get a snapshot from a new object in the shared cache, and then read this
+		// object via a relationship, so that shared cache is consulted
+		Employee e = context1.newObject(Employee.class);
+		e.setName("E1");
+		e.setSalary(1234.01f);
+
+		context1.commitChanges();
+
+
+		final ObjectIdQuery q1 = new ObjectIdQuery(
+				new ObjectId("AbstractPerson", "PERSON_ID", Cayenne.intPKForObject(e)),
+				false,
+				ObjectIdQuery.CACHE);
+
+
+		queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+			@Override
+			public void execute() {
+				// use different context to ensure we hit shared cache
+				AbstractPerson ap1 = (AbstractPerson) Cayenne.objectForQuery(context2, q1);
+				assertTrue(ap1 instanceof Employee);
+			}
+		});
+	}
 }


[2/2] cayenne git commit: CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name

Posted by aa...@apache.org.
CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name

* release notes


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/45e413de
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/45e413de
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/45e413de

Branch: refs/heads/STABLE-3.1
Commit: 45e413de058b1b7763e8e4052662c7b73758740a
Parents: 5e92ab9
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Fri Aug 12 17:15:56 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Fri Aug 12 18:18:06 2016 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/45e413de/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 1e888be..a7113a5 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -15,6 +15,7 @@ Date: not yet released
 Bug Fixes Since 3.1.1:
 
 CAY-2084 ObjectIdQuery - no cache access polymorphism
+CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name
 
 ----------------------------------
 Release: 3.1.1