You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2011/07/27 21:06:25 UTC
svn commit: r1151591 - in /openjpa/branches/2.1.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/
openjpa-kernel/src/main/java/org/apache/openjpa/meta/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
Author: mikedd
Date: Wed Jul 27 19:06:24 2011
New Revision: 1151591
URL: http://svn.apache.org/viewvc?rev=1151591&view=rev
Log:
OPENJPA-2010: Check line number and source file before logging duplicate metadata warning
Modified:
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java
openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataTool.java
openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
Modified: openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java (original)
+++ openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java Wed Jul 27 19:06:24 2011
@@ -529,11 +529,12 @@ public class MappingTool
if (_mappingWriter != null) {
output = new HashMap<File, String>();
File tmp = new File("openjpatmp");
- for (int i = 0; i < mappings.length; i++)
- mappings[i].setSource(tmp, SourceTracker.SRC_OTHER);
- for (int i = 0; i < queries.length; i++)
- queries[i].setSource(tmp, queries[i].getSourceScope(),
- SourceTracker.SRC_OTHER);
+ for (int i = 0; i < mappings.length; i++) {
+ mappings[i].setSource(tmp, SourceTracker.SRC_OTHER, "openjpatmp");
+ }
+ for (int i = 0; i < queries.length; i++) {
+ queries[i].setSource(tmp, queries[i].getSourceScope(), SourceTracker.SRC_OTHER, "openjpatmp");
+ }
for (int i = 0; i < seqs.length; i++)
seqs[i].setSource(tmp, seqs[i].getSourceScope(),
SourceTracker.SRC_OTHER);
@@ -708,7 +709,7 @@ public class MappingTool
&& fmds[i].getDeclaredType() != Object.class)
fmds[i].setDeclaredTypeCode(JavaTypes.PC);
}
- meta.setSource(_file, meta.getSourceType());
+ meta.setSource(_file, meta.getSourceType(), _file == null ? "": _file.getPath() );
meta.setResolve(MODE_META, true);
}
Modified: openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java (original)
+++ openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java Wed Jul 27 19:06:24 2011
@@ -381,10 +381,11 @@ public abstract class AbstractCFMetaData
if (queries[i].getSourceMode() == MODE_QUERY
|| (mode & queries[i].getSourceMode()) == 0)
continue;
- if (queries[i].getSourceFile() == null)
- queries[i].setSource(defaultSourceFile(queries[i],
- clsNames), queries[i].getSourceScope(),
- queries[i].getSourceType());
+ if (queries[i].getSourceFile() == null) {
+ File defaultFile = defaultSourceFile(queries[i], clsNames);
+ queries[i].setSource(defaultFile, queries[i].getSourceScope(), queries[i].getSourceType(),
+ defaultFile == null ? "" : defaultFile.getPath());
+ }
if ((AccessController.doPrivileged(
J2DoPrivHelper.existsAction(queries[i].getSourceFile())))
.booleanValue()) {
@@ -423,9 +424,11 @@ public abstract class AbstractCFMetaData
for (int i = 0; i < queries.length; i++) {
if (queries[i].getSourceMode() != MODE_QUERY)
continue;
- if (queries[i].getSourceFile() == null)
- queries[i].setSource(defaultSourceFile(queries[i], clsNames),
- queries[i].getSourceScope(), queries[i].getSourceType());
+ if (queries[i].getSourceFile() == null) {
+ File defaultFile = defaultSourceFile(queries[i], clsNames);
+ queries[i].setSource(defaultFile, queries[i].getSourceScope(), queries[i].getSourceType(),
+ defaultFile == null ? "" : defaultFile.getPath());
+ }
if ((AccessController.doPrivileged(
J2DoPrivHelper.existsAction(queries[i].getSourceFile())))
.booleanValue()) {
@@ -522,7 +525,8 @@ public abstract class AbstractCFMetaData
* Set the current source file of the given metadata.
*/
protected void setSourceFile(ClassMetaData meta, File sourceFile) {
- meta.setSource(sourceFile, meta.getSourceType());
+ meta.setSource(sourceFile, meta.getSourceType(), sourceFile != null ?
+ sourceFile.getPath() : "");
}
/**
Modified: openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Wed Jul 27 19:06:24 2011
@@ -145,6 +145,7 @@ public class ClassMetaData
private final ValueMetaData _owner;
private final LifecycleMetaData _lifeMeta = new LifecycleMetaData(this);
private File _srcFile = null;
+ private String _srcName = null;
private int _srcType = SRC_OTHER;
private int _lineNum = 0;
private int _colNum = 0;
@@ -2403,9 +2404,10 @@ public class ClassMetaData
return _srcType;
}
- public void setSource(File file, int srcType) {
+ public void setSource(File file, int srcType, String srcName) {
_srcFile = file;
_srcType = srcType;
+ _srcName = srcName;
}
public String getResourceName() {
@@ -2757,5 +2759,9 @@ public class ClassMetaData
return _cacheEnabled;
return getPCSuperclassMetaData() != null ? getPCSuperclassMetaData().getCacheEnabled() : null;
}
+
+ public String getSourceName(){
+ return _srcName;
+ }
}
Modified: openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataTool.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataTool.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataTool.java (original)
+++ openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataTool.java Wed Jul 27 19:06:24 2011
@@ -175,7 +175,7 @@ public class MetaDataTool
&& fmds[i].getDeclaredType() != Object.class)
fmds[i].setDeclaredTypeCode(JavaTypes.PC);
}
- meta.setSource(_file, meta.getSourceType());
+ meta.setSource(_file, meta.getSourceType(), _file == null ? "" : _file.getPath());
_flush = true;
}
@@ -205,7 +205,7 @@ public class MetaDataTool
output = new HashMap();
File tmp = new File("openjpatmp");
for (int i = 0; i < metas.length; i++)
- metas[i].setSource(tmp, metas[i].getSourceType());
+ metas[i].setSource(tmp, metas[i].getSourceType(), tmp.getPath());
}
if (!mdf.store(metas, new QueryMetaData[0],
new SequenceMetaData[0], MODE_META, output))
Modified: openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java (original)
+++ openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java Wed Jul 27 19:06:24 2011
@@ -61,6 +61,8 @@ public class QueryMetaData
private int _lineNum;
private int _colNum;
private boolean _convertPositionalParametersToNamed;
+ private String _srcName;
+
/**
* Construct with the given name.
*/
@@ -274,10 +276,11 @@ public class QueryMetaData
return _srcType;
}
- public void setSource(File file, Object scope, int srcType) {
+ public void setSource(File file, Object scope, int srcType, String srcName) {
_file = file;
_scope = scope;
_srcType = srcType;
+ _srcName = srcName;
}
public String getResourceName() {
@@ -299,4 +302,8 @@ public class QueryMetaData
public void setColNumber(int colNum) {
_colNum = colNum;
}
+
+ public String getSourceName() {
+ return _srcName;
+ }
}
Modified: openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Wed Jul 27 19:06:24 2011
@@ -733,12 +733,18 @@ public class AnnotationPersistenceMetaDa
*/
private ClassMetaData getMetaData() {
ClassMetaData meta = getRepository().getCachedMetaData(_cls);
- if (meta != null &&
- ((isMetaDataMode() && (meta.getSourceMode() & MODE_META) != 0) ||
- (isMappingMode() &&
- (meta.getSourceMode() & MODE_MAPPING) != 0))) {
- if (_log.isWarnEnabled())
+ if (meta != null
+ && ((isMetaDataMode()
+ && (meta.getSourceMode() & MODE_META) != 0)
+ || (isMappingMode() && (meta.getSourceMode() & MODE_MAPPING) != 0) ) ) {
+ if (_log.isWarnEnabled()) {
_log.warn(_loc.get("dup-metadata", _cls.getName()));
+ }
+ if(_log.isTraceEnabled()) {
+ _log.trace(String.format(
+ "MetaData originally obtained from file: %s under mode :%d with scope %s, and type :%d",
+ meta.getSourceName(), meta.getSourceMode(), meta.getSourceScope(), meta.getSourceType()));
+ }
return null;
}
@@ -746,7 +752,8 @@ public class AnnotationPersistenceMetaDa
meta = getRepository().addMetaData(_cls, getAccessCode(_cls));
meta.setEnvClassLoader(_envLoader);
meta.setSourceMode(MODE_NONE);
- meta.setSource(getSourceFile(), SourceTracker.SRC_ANNOTATIONS);
+ meta.setSource(getSourceFile(), SourceTracker.SRC_ANNOTATIONS, getSourceFile() == null ? ""
+ : getSourceFile().getPath());
}
return meta;
}
@@ -1825,7 +1832,7 @@ public class AnnotationPersistenceMetaDa
}
meta.setSource(getSourceFile(), (el instanceof Class) ? el : null,
- SourceTracker.SRC_ANNOTATIONS);
+ SourceTracker.SRC_ANNOTATIONS, getSourceFile() == null ? "" : getSourceFile().getPath());
if (isMetaDataMode())
meta.setSourceMode(MODE_META);
else if (isMappingMode())
@@ -1902,7 +1909,7 @@ public class AnnotationPersistenceMetaDa
meta.addHint(hint.name(), hint.value());
meta.setSource(getSourceFile(), (el instanceof Class) ? el : null,
- SourceTracker.SRC_ANNOTATIONS);
+ SourceTracker.SRC_ANNOTATIONS, getSourceFile() == null ? "" : getSourceFile().getPath());
if (isMetaDataMode())
meta.setSourceMode(MODE_META);
else if (isMappingMode())
Modified: openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=1151591&r1=1151590&r2=1151591&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Wed Jul 27 19:06:24 2011
@@ -871,12 +871,20 @@ public class XMLPersistenceMetaDataParse
&& ((isMetaDataMode() && (meta.getSourceMode() & MODE_META) != 0)
|| (isMappingMode() && (meta.getSourceMode() & MODE_MAPPING) != 0)))
{
- if (log.isWarnEnabled())
- log.warn(_loc.get("dup-metadata", _cls, getSourceName()));
+ if(isDuplicateClass(meta)) {
+ if (log.isWarnEnabled()) {
+ log.warn(_loc.get("dup-metadata", _cls, getSourceName()));
+ }
+ if(log.isTraceEnabled()) {
+ log.trace(String.format(
+ "MetaData originally obtained from source: %s under mode: %d with scope: %s, and type: %d",
+ meta.getSourceName(), meta.getSourceMode(), meta.getSourceScope(), meta.getSourceType()));
+ }
+ }
_cls = null;
return false;
}
-
+
int access = AccessCode.UNKNOWN;
if (meta == null) {
int accessCode = toAccessType(attrs.getValue("access"));
@@ -896,17 +904,20 @@ public class XMLPersistenceMetaDataParse
meta.setSourceMode(MODE_NONE);
// parse annotations first so XML overrides them
- if (_parser != null)
+ if (_parser != null) {
_parser.parse(_cls);
+ }
}
access = meta.getAccessType();
boolean mappedSuper = "mapped-superclass".equals(elem);
boolean embeddable = "embeddable".equals(elem);
+
if (isMetaDataMode()) {
- meta.setSource(getSourceFile(), SourceTracker.SRC_XML);
- meta.setSourceMode(MODE_META, true);
Locator locator = getLocation().getLocator();
+ meta.setSource(getSourceFile(), SourceTracker.SRC_XML, locator != null ? locator.getSystemId() : "" );
+ meta.setSourceMode(MODE_META, true);
+
if (locator != null) {
meta.setLineNumber(locator.getLineNumber());
meta.setColNumber(locator.getColumnNumber());
@@ -1697,7 +1708,7 @@ public class XMLPersistenceMetaDataParse
Object cur = currentElement();
Object scope = (cur instanceof ClassMetaData)
? ((ClassMetaData) cur).getDescribedType() : null;
- meta.setSource(getSourceFile(), scope, SourceTracker.SRC_XML);
+ meta.setSource(getSourceFile(), scope, SourceTracker.SRC_XML, locator == null ? "" : locator.getSystemId());
if (isMetaDataMode())
meta.setSourceMode(MODE_META);
else if (isMappingMode())
@@ -1780,8 +1791,9 @@ public class XMLPersistenceMetaDataParse
log.trace(_loc.get("parse-native-query", name));
QueryMetaData meta = getRepository().getCachedQueryMetaData(null, name);
- if (meta != null && log.isWarnEnabled())
+ if (meta != null && isDuplicateQuery(meta) ) {
log.warn(_loc.get("override-query", name, currentLocation()));
+ }
meta = getRepository().addQueryMetaData(null, name);
meta.setDefiningType(_cls);
@@ -1801,10 +1813,9 @@ public class XMLPersistenceMetaDataParse
meta.setResultSetMappingName(val);
Object cur = currentElement();
- Object scope = (cur instanceof ClassMetaData)
- ? ((ClassMetaData) cur).getDescribedType() : null;
- meta.setSource(getSourceFile(), scope, SourceTracker.SRC_XML);
+ Object scope = (cur instanceof ClassMetaData) ? ((ClassMetaData) cur).getDescribedType() : null;
Locator locator = getLocation().getLocator();
+ meta.setSource(getSourceFile(), scope, SourceTracker.SRC_XML, locator == null ? "" : locator.getSystemId());
if (locator != null) {
meta.setLineNumber(locator.getLineNumber());
meta.setColNumber(locator.getColumnNumber());
@@ -2182,4 +2193,47 @@ public class XMLPersistenceMetaDataParse
protected String normalizeCatalogName(String catName) {
return catName;
}
+
+ /**
+ * Determines whether the ClassMetaData has been resolved more than once. Compares the current sourceName and
+ * linenumber to the ones used to originally resolve the metadata.
+ *
+ * @param meta The ClassMetaData to inspect.
+ * @return true if the source was has already been resolved from a different location. Otherwise return false
+ */
+ protected boolean isDuplicateClass(ClassMetaData meta) {
+ if (!StringUtils.equals(getSourceName(), meta.getSourceName())) {
+ return true;
+ }
+
+ if (getLineNum() != meta.getLineNumber()) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Determines whether the QueryMetaData has been resolved more than once.
+ * @param meta QueryMetaData that has already been resolved.
+ * @return true if the QueryMetaData was defined in a different place - e.g. another line in orm.xml.
+ */
+ protected boolean isDuplicateQuery(QueryMetaData meta) {
+ if(! StringUtils.equals(getSourceName(), meta.getSourceName())) {
+ return true;
+ }
+ if(getLineNum() != meta.getLineNumber()) {
+ return true;
+ }
+ return false;
+
+ }
+
+ private int getLineNum() {
+ int lineNum = 0;
+ Locator loc = getLocation().getLocator();
+ if(loc != null ) {
+ lineNum = loc.getLineNumber();
+ }
+ return lineNum;
+ }
}