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/26 23:13:11 UTC
svn commit: r1413894 - in /openjpa/branches/2.2.x:
openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
Author: helenxu
Date: Mon Nov 26 22:13:10 2012
New Revision: 1413894
URL: http://svn.apache.org/viewvc?rev=1413894&view=rev
Log:
OPENJPA-2295 speed up query metadata lookup
Modified:
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
openjpa/branches/2.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
Modified: openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=1413894&r1=1413893&r2=1413894&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Mon Nov 26 22:13:10 2012
@@ -114,7 +114,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 =
@@ -1969,14 +1969,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;
}
@@ -1989,7 +1988,7 @@ public class MetaDataRepository implemen
// not in cache; load
_factory.load(cls, MODE_QUERY, envLoader);
- return _queries.get(key);
+ return _queries.get(name);
}
/**
@@ -2008,13 +2007,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);
}
}
@@ -2025,12 +2024,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;
}
}
@@ -2053,10 +2052,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;
}
}
@@ -2068,36 +2067,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/branches/2.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java?rev=1413894&r1=1413893&r2=1413894&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java (original)
+++ openjpa/branches/2.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java Mon Nov 26 22:13:10 2012
@@ -65,8 +65,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);