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 2021/03/09 08:19:50 UTC
[cayenne] branch STABLE-4.1 updated: CAY-2678 Inheritance warnings
caused by unnecessary MappingCache creations during initialization
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 <st...@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);
}