You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2017/03/24 08:51:15 UTC

cayenne git commit: 2094 SelectById query doesn't work from ROP client with protostuff

Repository: cayenne
Updated Branches:
  refs/heads/master 663e9ec19 -> 873314765


2094 SelectById query doesn't work from ROP client with protostuff


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

Branch: refs/heads/master
Commit: 873314765ccf3daf70f98d5ceb3aa1d1661e2fe9
Parents: 663e9ec
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Mar 24 11:25:54 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Mar 24 11:25:54 2017 +0300

----------------------------------------------------------------------
 .../cayenne/remote/service/LocalConnection.java |  3 +-
 .../cayenne/query/ClientObjectSelectIT.java     | 17 +++++++----
 .../org/apache/cayenne/map/EntityResolver.java  | 31 ++++++++++++++++++++
 .../apache/cayenne/query/BaseQueryMetadata.java | 15 +---------
 .../org/apache/cayenne/query/SelectById.java    | 12 ++++----
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 6 files changed, 52 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/87331476/cayenne-client/src/main/java/org/apache/cayenne/remote/service/LocalConnection.java
----------------------------------------------------------------------
diff --git a/cayenne-client/src/main/java/org/apache/cayenne/remote/service/LocalConnection.java b/cayenne-client/src/main/java/org/apache/cayenne/remote/service/LocalConnection.java
index db9c2fb..65bceec 100644
--- a/cayenne-client/src/main/java/org/apache/cayenne/remote/service/LocalConnection.java
+++ b/cayenne-client/src/main/java/org/apache/cayenne/remote/service/LocalConnection.java
@@ -109,8 +109,7 @@ public class LocalConnection extends BaseConnection {
                     break;
 
                 case JAVA_SERIALIZATION:
-                    processedMessage = (ClientMessage) Util
-                            .cloneViaSerialization(message);
+                    processedMessage = Util.cloneViaSerialization(message);
                     break;
 
                 default:

http://git-wip-us.apache.org/repos/asf/cayenne/blob/87331476/cayenne-client/src/test/java/org/apache/cayenne/query/ClientObjectSelectIT.java
----------------------------------------------------------------------
diff --git a/cayenne-client/src/test/java/org/apache/cayenne/query/ClientObjectSelectIT.java b/cayenne-client/src/test/java/org/apache/cayenne/query/ClientObjectSelectIT.java
index e328dd6..9cb6cee 100644
--- a/cayenne-client/src/test/java/org/apache/cayenne/query/ClientObjectSelectIT.java
+++ b/cayenne-client/src/test/java/org/apache/cayenne/query/ClientObjectSelectIT.java
@@ -65,8 +65,8 @@ public class ClientObjectSelectIT extends ClientCase {
 
     @Test
     public void testSelect() throws Exception{
-        List<ClientMtTable1> list = ObjectSelect.query(ClientMtTable1.class).
-                select(context);
+        List<ClientMtTable1> list = ObjectSelect.query(ClientMtTable1.class)
+                .select(context);
 
         assertNotNull(list);
         assertEquals(20, list.size());
@@ -74,7 +74,7 @@ public class ClientObjectSelectIT extends ClientCase {
 
     @Test
     public void testCacheSelect() throws Exception{
-        final ObjectSelect objectSelect = ObjectSelect.query(ClientMtTable1.class).
+        final ObjectSelect<ClientMtTable1> objectSelect = ObjectSelect.query(ClientMtTable1.class).
                 cacheStrategy(QueryCacheStrategy.SHARED_CACHE);
 
         final List<ClientMtTable1> list1 = objectSelect.select(context);
@@ -105,7 +105,7 @@ public class ClientObjectSelectIT extends ClientCase {
 
     @Test
     public void testCacheLimitSelect() throws Exception {
-        final ObjectSelect objectSelect = ObjectSelect.query(ClientMtTable1.class)
+        final ObjectSelect<ClientMtTable1> objectSelect = ObjectSelect.query(ClientMtTable1.class)
                 .cacheStrategy(QueryCacheStrategy.SHARED_CACHE)
                 .offset(5)
                 .limit(10);
@@ -126,7 +126,7 @@ public class ClientObjectSelectIT extends ClientCase {
 
     @Test
     public void testPageSelect() throws Exception{
-        final ObjectSelect objectSelect = ObjectSelect.query(ClientMtTable1.class)
+        final ObjectSelect<ClientMtTable1> objectSelect = ObjectSelect.query(ClientMtTable1.class)
                 .pageSize(5);
 
         final List<ClientMtTable1> list = objectSelect.select(context);
@@ -146,4 +146,11 @@ public class ClientObjectSelectIT extends ClientCase {
         assertEquals(1, count);
     }
 
+    @Test
+    public void testCAY_2094() {
+        ClientMtTable1 clientMtTable1 = SelectById.query(ClientMtTable1.class, 1).selectOne(context);
+        assertNotNull(clientMtTable1);
+        assertEquals(1, clientMtTable1.getObjectId().getIdSnapshot().get("TABLE1_ID"));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/87331476/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
index f11c5d4..e7f93d8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
@@ -500,6 +500,37 @@ public class EntityResolver implements MappingNamespace, Serializable {
     }
 
     /**
+     * <p>
+     * Looks in the DataMap's that this object was created with for the
+     * ObjEntity that maps to the services the specified class, with option to
+     * fallback to search by name with client resolver in case entity not found.
+     * </p>
+     * <p>
+     * This method can be used where entity class can be received from client.
+     * </p>
+     *
+     * @param entityClass entity class to search
+     * @param lookupClientResolver flag to fallback to client resolver
+     * @return the required ObjEntity or null if there is none that matches the
+     *         specifier
+     *
+     * @since 4.0
+     */
+    public ObjEntity getObjEntity(Class<?> entityClass, boolean lookupClientResolver) {
+        ObjEntity entity = getObjEntity(entityClass);
+        if(entity != null || !lookupClientResolver) {
+            return entity;
+        }
+
+        EntityResolver clientResolver = getClientEntityResolver();
+        if (clientResolver != this) {
+            ObjEntity clientEntity = clientResolver.getObjEntity(entityClass);
+            entity = clientEntity == null ? null : getObjEntity(clientEntity.getName());
+        }
+        return entity;
+    }
+
+    /**
      * @deprecated since 4.0, use {@link #getObjEntity(Class)}.
      */
     public ObjEntity lookupObjEntity(Class<?> entityClass) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/87331476/cayenne-server/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
index 92b7835..bc13719 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
@@ -104,20 +104,7 @@ class BaseQueryMetadata implements QueryMetadata, XMLSerializable, Serializable
 
 			if (root != null) {
 				if (root instanceof Class<?>) {
-					entity = resolver.getObjEntity((Class<?>) root);
-					if (entity == null) { // entity not found, try to resolve it
-											// with
-						// client resolver
-						EntityResolver clientResolver = resolver.getClientEntityResolver();
-						if (clientResolver != resolver) {
-							ObjEntity clientEntity = clientResolver.getObjEntity((Class<?>) root);
-
-							if (clientEntity != null) {
-								entity = resolver.getObjEntity(clientEntity.getName());
-							}
-						}
-					}
-
+					entity = resolver.getObjEntity((Class<?>) root, true);
 					if (entity != null) {
 						this.dbEntity = entity.getDbEntity();
 						this.dataMap = entity.getDataMap();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/87331476/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
index ea9bfdc..b6e8c58 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
@@ -60,7 +60,7 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
 	PrefetchTreeNode prefetches;
 
 	public static <T> SelectById<T> query(Class<T> entityType, Object id) {
-		SelectById<T> q = new SelectById<T>();
+		SelectById<T> q = new SelectById<>();
 
 		q.entityType = entityType;
 		q.singleId = id;
@@ -70,7 +70,7 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
 	}
 
 	public static <T> SelectById<T> query(Class<T> entityType, Map<String, ?> id) {
-		SelectById<T> q = new SelectById<T>();
+		SelectById<T> q = new SelectById<>();
 
 		q.entityType = entityType;
 		q.mapId = id;
@@ -82,7 +82,7 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
 	public static <T> SelectById<T> query(Class<T> entityType, ObjectId id) {
 		checkObjectId(id);
 
-		SelectById<T> q = new SelectById<T>();
+		SelectById<T> q = new SelectById<>();
 
 		q.entityName = id.getEntityName();
 		q.mapId = id.getIdSnapshot();
@@ -146,7 +146,7 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
 
 	@Override
 	public void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
-		context.iterate((Select<T>) this, callback);
+		context.iterate(this, callback);
 	}
 
 	@Override
@@ -288,7 +288,7 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
 		ObjEntity entity = resolveEntity(resolver);
 		Map<String, ?> id = resolveId(entity);
 
-		SelectQuery<Object> query = new SelectQuery<Object>();
+		SelectQuery<Object> query = new SelectQuery<>();
 		query.setRoot(entity);
 		query.setFetchingDataRows(fetchingDataRows);
 		query.setQualifier(matchAllDbExp(id, Expression.EQUAL_TO));
@@ -328,6 +328,6 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
 			throw new CayenneRuntimeException("Misconfigured query. Either entityName or entityType must be set");
 		}
 
-		return entityName != null ? resolver.getObjEntity(entityName) : resolver.getObjEntity(entityType);
+		return entityName != null ? resolver.getObjEntity(entityName) : resolver.getObjEntity(entityType, true);
 	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/87331476/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 48618a8..4be4483 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -28,6 +28,7 @@ CAY-2272 ColumnSelect: methods to manually control DISTINCT clause
 
 Bug Fixes:
 
+CAY-2094 SelectById query doesn't work from ROP client
 CAY-2240 Modeler: issue with cursor rendering for EJBQL query
 CAY-2243 ObjectContext.getGraphManager().unregisterObject() inconsistencies
 CAY-2256 Cannot Save/Insert an Object With null Flattened (complex) toOne Relationship (see also CAY-2146)