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);