This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch STABLE-4.1 in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/STABLE-4.1 by this push: new 241d544 CAY-2678 Inheritance warnings caused by unnecessary MappingCache creations during initialization 241d544 is described below commit 241d544b37514e654f4254feb60612f96afb740e Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Tue Mar 9 11:10:49 2021 +0300 CAY-2678 Inheritance warnings caused by unnecessary MappingCache creations during initialization (cherry picked from commit 22327d3891a70a27f83a396691a89fbbc476a536) --- RELEASE-NOTES.txt | 1 + .../org/apache/cayenne/map/EntityResolver.java | 34 ---------------------- .../java/org/apache/cayenne/map/MappingCache.java | 24 +++++++++++++++ 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 72b718c..b39dd84 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -17,6 +17,7 @@ Bug Fixes: CAY-2670 CommitLog does not include FKs for deleted objects with one-way relationships CAY-2676 Degradation: Custom class generation templates are not working anymore CAY-2677 Modeler: Custom Class Generation Templates for Embeddables and DataMaps +CAY-2678 Inheritance warnings caused by unnecessary MappingCache creations during initialization CAY-2679 Unstable ordering of relationships in the .map.xml file CAY-2681 Modeler: All selected checkboxes cause project to become dirty at initialization CAY-2690 dbimport skips length changes for BINARY and VARBINARY columns 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 088326c..8eb0d8a 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 @@ -357,7 +357,6 @@ public class EntityResolver implements MappingNamespace, Serializable { public synchronized void addDataMap(DataMap map) { if (!maps.contains(map)) { - checkForDuplicatedNames(map); maps.add(map); map.setNamespace(this); refreshMappingCache(); @@ -370,39 +369,6 @@ public class EntityResolver implements MappingNamespace, Serializable { } } - private void checkForDuplicatedNames(DataMap map) { - for(DbEntity entity : map.getDbEntities()) { - DbEntity foundDbEntity = getDbEntity(entity.getName()); - if(foundDbEntity != null) { - processWarning(entity.getName(), map.getName(), foundDbEntity.getDataMap().getName()); - } - } - for(ObjEntity entity : map.getObjEntities()) { - ObjEntity foundObjEntity = getObjEntity(entity.getName()); - if(foundObjEntity != null) { - processWarning(entity.getName(), map.getName(), foundObjEntity.getDataMap().getName()); - } - } - for(Procedure procedure : map.getProcedures()) { - Procedure foundProcedure = getProcedure(procedure.getName()); - if(foundProcedure != null) { - processWarning(procedure.getName(), map.getName(), foundProcedure.getDataMap().getName()); - } - } - for(Embeddable embeddable : map.getEmbeddables()) { - Embeddable foundEmbeddable = getEmbeddable(embeddable.getClassName()); - if(foundEmbeddable != null) { - processWarning(embeddable.getClassName(), map.getName(), foundEmbeddable.getDataMap().getName()); - } - } - } - - private void processWarning(String duplicatedName, String dataMapName, String originalDataMapName) { - logger.warn("Duplicated name " + duplicatedName + " was found in " + - dataMapName + ". This name was also found in " + - originalDataMapName + "."); - } - /** * Refreshes entity cache to reflect the current state of the DataMaps in * the EntityResolver. diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java b/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java index 87faec2..2c8d31a 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.ObjectId; import org.apache.cayenne.Persistent; +import org.apache.cayenne.util.CayenneMapEntry; import org.apache.cayenne.util.commons.CompositeCollection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,11 +71,13 @@ class MappingCache implements MappingNamespace { // index DbEntities separately and before ObjEntities to avoid infinite // loops when looking up DbEntities during ObjEntity index op for (DataMap map : maps) { + checkNameDuplicates(map.getDbEntityMap(), dbEntities, map); dbEntities.putAll(map.getDbEntityMap()); } for (DataMap map : maps) { // index ObjEntities by name + checkNameDuplicates(map.getObjEntityMap(), objEntities, map); objEntities.putAll(map.getObjEntityMap()); // index ObjEntities by class name @@ -96,6 +99,7 @@ class MappingCache implements MappingNamespace { } // index stored procedures + checkNameDuplicates(map.getProcedureMap(), procedures, map); procedures.putAll(map.getProcedureMap()); // index embeddables @@ -143,6 +147,26 @@ class MappingCache implements MappingNamespace { } } + /** + * Utility method to warn about name duplicates in different DataMaps. + * + * @param src map + * @param dst map with already added entities + * @param srcMap source DataMap + */ + private void checkNameDuplicates(Map<String, ? extends CayenneMapEntry> src, + Map<String, ? extends CayenneMapEntry> dst, + DataMap srcMap) { + for(CayenneMapEntry entry : src.values()) { + CayenneMapEntry duplicate = dst.get(entry.getName()); + if(duplicate != null) { + DataMap parent = (DataMap) duplicate.getParent(); + logger.warn("Found duplicated name " + entry.getName() + + " in datamaps " + srcMap.getName() + " and " + parent.getName()); + } + } + } + public Embeddable getEmbeddable(String className) { return embeddables.get(className); }