Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 2813A200C41 for ; Fri, 24 Mar 2017 09:51:18 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 2695C160B93; Fri, 24 Mar 2017 08:51:18 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 1D6C8160B82 for ; Fri, 24 Mar 2017 09:51:16 +0100 (CET) Received: (qmail 88891 invoked by uid 500); 24 Mar 2017 08:51:16 -0000 Mailing-List: contact commits-help@cayenne.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cayenne.apache.org Delivered-To: mailing list commits@cayenne.apache.org Received: (qmail 88880 invoked by uid 99); 24 Mar 2017 08:51:16 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Mar 2017 08:51:16 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id F40C6DFC15; Fri, 24 Mar 2017 08:51:15 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ntimofeev@apache.org To: commits@cayenne.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: cayenne git commit: 2094 SelectById query doesn't work from ROP client with protostuff Date: Fri, 24 Mar 2017 08:51:15 +0000 (UTC) archived-at: Fri, 24 Mar 2017 08:51:18 -0000 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 Authored: Fri Mar 24 11:25:54 2017 +0300 Committer: Nikita Timofeev 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 list = ObjectSelect.query(ClientMtTable1.class). - select(context); + List 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 objectSelect = ObjectSelect.query(ClientMtTable1.class). cacheStrategy(QueryCacheStrategy.SHARED_CACHE); final List 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 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 objectSelect = ObjectSelect.query(ClientMtTable1.class) .pageSize(5); final List 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 { } /** + *

+ * 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. + *

+ *

+ * This method can be used where entity class can be received from client. + *

+ * + * @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 extends IndirectQuery implements Select { PrefetchTreeNode prefetches; public static SelectById query(Class entityType, Object id) { - SelectById q = new SelectById(); + SelectById q = new SelectById<>(); q.entityType = entityType; q.singleId = id; @@ -70,7 +70,7 @@ public class SelectById extends IndirectQuery implements Select { } public static SelectById query(Class entityType, Map id) { - SelectById q = new SelectById(); + SelectById q = new SelectById<>(); q.entityType = entityType; q.mapId = id; @@ -82,7 +82,7 @@ public class SelectById extends IndirectQuery implements Select { public static SelectById query(Class entityType, ObjectId id) { checkObjectId(id); - SelectById q = new SelectById(); + SelectById q = new SelectById<>(); q.entityName = id.getEntityName(); q.mapId = id.getIdSnapshot(); @@ -146,7 +146,7 @@ public class SelectById extends IndirectQuery implements Select { @Override public void iterate(ObjectContext context, ResultIteratorCallback callback) { - context.iterate((Select) this, callback); + context.iterate(this, callback); } @Override @@ -288,7 +288,7 @@ public class SelectById extends IndirectQuery implements Select { ObjEntity entity = resolveEntity(resolver); Map id = resolveId(entity); - SelectQuery query = new SelectQuery(); + SelectQuery query = new SelectQuery<>(); query.setRoot(entity); query.setFetchingDataRows(fetchingDataRows); query.setQualifier(matchAllDbExp(id, Expression.EQUAL_TO)); @@ -328,6 +328,6 @@ public class SelectById extends IndirectQuery implements Select { 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)