Author: hthomann
Date: Tue Nov 25 20:36:15 2014
New Revision: 1641687

URL: http://svn.apache.org/r1641687
Log:
OPENJPA-2295: speed up query metadata lookup - back ported to 2.2.1.x Helen's 
2.2.x/trunk changes.

Modified:
    
openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
    
openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
    
openjpa/branches/2.2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Modified: 
openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=1641687&r1=1641686&r2=1641687&view=diff
==============================================================================
--- 
openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
 (original)
+++ 
openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
 Tue Nov 25 20:36:15 2014
@@ -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 =
@@ -2004,14 +2004,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;
         }
@@ -2024,7 +2023,7 @@ public class MetaDataRepository implemen
 
         // not in cache; load
         _factory.load(cls, MODE_QUERY, envLoader);
-        return _queries.get(key);
+        return _queries.get(name);
     }
 
     /**
@@ -2040,16 +2039,20 @@ public class MetaDataRepository implemen
         }
     }
 
+    public QueryMetaData getCachedQueryMetaData(Class<?> cls, String name) {
+        return getCachedQueryMetaData(name);
+    }
+    
     /**
      * 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);
         }
     }
 
@@ -2060,12 +2063,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;   
         }
     }
@@ -2088,10 +2091,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;
         }
     }
 
@@ -2103,36 +2106,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.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java?rev=1641687&r1=1641686&r2=1641687&view=diff
==============================================================================
--- 
openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
 (original)
+++ 
openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetaDataRepository.java
 Tue Nov 25 20:36:15 2014
@@ -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);

Modified: 
openjpa/branches/2.2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=1641687&r1=1641686&r2=1641687&view=diff
==============================================================================
--- 
openjpa/branches/2.2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
 (original)
+++ 
openjpa/branches/2.2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
 Tue Nov 25 20:36:15 2014
@@ -1950,7 +1950,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()));
         }


Reply via email to