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:11:19 UTC
[cayenne] branch master 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 master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 22327d3 CAY-2678 Inheritance warnings caused by unnecessary MappingCache creations during initialization
22327d3 is described below
commit 22327d3891a70a27f83a396691a89fbbc476a536
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
---
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 6af3f1a..2343ab7 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -22,6 +22,7 @@ Bug Fixes:
CAY-2658 DataChannelMetaData is null during cgen execution
CAY-2661 NPE on DB Import screen
+CAY-2678 Inheritance warnings caused by unnecessary MappingCache creations during initialization
CAY-2683 Don't use DISTINCT for joins on to-one related tables
CAY-2685 JsonType should use the actual JDBC type, not OTHER
CAY-2686 SQL translator incorrectly quotes fully qualified tables' names
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 19deb97..0d498a3 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
@@ -399,7 +399,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();
@@ -412,39 +411,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);
}