You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by he...@apache.org on 2012/11/27 18:26:12 UTC
svn commit: r1414275 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/meta/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
Author: helenxu
Date: Tue Nov 27 17:26:11 2012
New Revision: 1414275
URL: http://svn.apache.org/viewvc?rev=1414275&view=rev
Log:
OPENJPA-2295 speed up query metadata lookup
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=1414275&r1=1414274&r2=1414275&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Tue Nov 27 17:26:11 2012
@@ -115,7 +115,7 @@ public class MetaDataRepository implemen
private Map<Class<?>, Collection<Class<?>>> _impls =
Collections.synchronizedMap(new HashMap<Class<?>, Collection<Class<?>>>());
private Map<Class<?>, Class<?>> _ifaces = Collections.synchronizedMap(new HashMap<Class<?>, Class<?>>());
- private Map<Object, QueryMetaData> _queries = new HashMap<Object, QueryMetaData>();
+ private Map<String, QueryMetaData> _queries = new HashMap<String, QueryMetaData>();
private Map<String, SequenceMetaData> _seqs = new HashMap<String, SequenceMetaData>();
private Map<String, List<Class<?>>> _aliases = Collections.synchronizedMap(new HashMap<String, List<Class<?>>>());
private Map<Class<?>, NonPersistentMetaData> _pawares =
@@ -1970,14 +1970,13 @@ public class MetaDataRepository implemen
return qm;
}
// check cache
- Object key = getQueryKey(cls, name);
- qm = (QueryMetaData) _queries.get(key);
+ qm = (QueryMetaData) _queries.get(name);
if (qm != null)
return qm;
// get metadata for class, which will find queries in metadata file
if (cls != null && getMetaData(cls, envLoader, false) != null) {
- qm = _queries.get(key);
+ qm = _queries.get(name);
if (qm != null)
return qm;
}
@@ -1990,7 +1989,7 @@ public class MetaDataRepository implemen
// not in cache; load
_factory.load(cls, MODE_QUERY, envLoader);
- return _queries.get(key);
+ return _queries.get(name);
}
/**
@@ -2009,13 +2008,13 @@ public class MetaDataRepository implemen
/**
* Return the cached query metadata for the given name.
*/
- public QueryMetaData getCachedQueryMetaData(Class<?> cls, String name) {
+ public QueryMetaData getCachedQueryMetaData(String name) {
if (_locking) {
synchronized (this) {
- return (QueryMetaData) _queries.get(getQueryKey(cls, name));
+ return (QueryMetaData) _queries.get(name);
}
} else {
- return (QueryMetaData) _queries.get(getQueryKey(cls, name));
+ return (QueryMetaData) _queries.get(name);
}
}
@@ -2026,12 +2025,12 @@ public class MetaDataRepository implemen
if (_locking) {
synchronized (this) {
QueryMetaData meta = newQueryMetaData(cls, name);
- _queries.put(getQueryKey(meta), meta);
+ _queries.put(name, meta);
return meta;
}
}else{
QueryMetaData meta = newQueryMetaData(cls, name);
- _queries.put(getQueryKey(meta), meta);
+ _queries.put(name, meta);
return meta;
}
}
@@ -2054,10 +2053,10 @@ public class MetaDataRepository implemen
return false;
if (_locking) {
synchronized (this) {
- return _queries.remove(getQueryKey(meta)) != null;
+ return _queries.remove(meta.getName()) != null;
}
} else {
- return _queries.remove(getQueryKey(meta)) != null;
+ return _queries.remove(meta.getName()) != null;
}
}
@@ -2069,36 +2068,22 @@ public class MetaDataRepository implemen
synchronized (this) {
if (name == null)
return false;
- return _queries.remove(getQueryKey(cls, name)) != null;
+ return _queries.remove(name) != null;
}
} else {
if (name == null)
return false;
- return _queries.remove(getQueryKey(cls, name)) != null;
+ return _queries.remove(name) != null;
}
}
/**
* Searches all cached query metadata by name.
*/
- public QueryMetaData searchQueryMetaDataByName(String name) {
- for (Object key : _queries.keySet()) {
- if (key instanceof QueryKey)
- if (StringUtils.equals(((QueryKey) key).name, name))
- return (QueryMetaData) _queries.get(key);
- }
- return null;
- }
-
- /**
- * Return a unique key for a given QueryMetaData.
- */
- private static Object getQueryKey(QueryMetaData meta) {
- if (meta == null)
- return null;
- return getQueryKey(meta.getDefiningType(), meta.getName());
+ public QueryMetaData searchQueryMetaDataByName(String name) {
+ return (QueryMetaData) _queries.get(name);
}
-
+
/**
* Return a unique key for a given class / name. The class argument can be null.
*/
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java?rev=1414275&r1=1414274&r2=1414275&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java Tue Nov 27 17:26:11 2012
@@ -66,8 +66,7 @@ public class TestMetaDataRepository exte
// assertTrue(aliases.size() == numEntities);
- QueryMetaData query = mdr.getCachedQueryMetaData(
- MdrTestEntity.class, "query");
+ QueryMetaData query = mdr.getCachedQueryMetaData("query");
assertNotNull(query);
} finally {
closeEMF(emf);
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=1414275&r1=1414274&r2=1414275&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Tue Nov 27 17:26:11 2012
@@ -1942,7 +1942,7 @@ public class XMLPersistenceMetaDataParse
if (log.isTraceEnabled())
log.trace(_loc.get("parse-native-query", name));
- QueryMetaData meta = getRepository().getCachedQueryMetaData(null, name);
+ QueryMetaData meta = getRepository().getCachedQueryMetaData(name);
if (meta != null && isDuplicateQuery(meta) ) {
log.warn(_loc.get("override-query", name, currentLocation()));
}