Author: curtisr7
Date: Tue Dec  8 18:46:40 2009
New Revision: 888513

URL: http://svn.apache.org/viewvc?rev=888513&view=rev
Log:
OPENJPA-1421: Reduce lock contention in JDBCStoreManager

Modified:
    
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
    
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java

Modified: 
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java?rev=888513&r1=888512&r2=888513&view=diff
==============================================================================
--- 
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
 (original)
+++ 
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
 Tue Dec  8 18:46:40 2009
@@ -502,15 +502,19 @@
         if (sel == null) return null;
         return sel.execute(this, fetch, params);
     }
-
+    
+    Map<SelectKey, Select> selectImplCacheMap = null;
     private Select newSelect(OpenJPAStateManager sm,
         ClassMapping mapping, JDBCFetchConfiguration fetch, int subs,
         List params) {
         if (!_isQuerySQLCache) 
             return newSelect(sm, mapping, fetch, subs);       
            
-        Map<SelectKey, Select> selectImplCacheMap = 
-            getCacheMapFromQuerySQLCache(JDBCStoreManager.class);
+        if (selectImplCacheMap == null) {
+            selectImplCacheMap =
+                getCacheMapFromQuerySQLCache(JDBCStoreManager.class);
+        }
+         
         JDBCFetchConfiguration fetchClone = new JDBCFetchConfigurationImpl();
         fetchClone.copy(fetch);
         SelectKey selKey = new SelectKey(mapping, null, fetchClone);

Modified: 
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java?rev=888513&r1=888512&r2=888513&view=diff
==============================================================================
--- 
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java
 (original)
+++ 
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java
 Tue Dec  8 18:46:40 2009
@@ -598,7 +598,8 @@
         else
             sm.setIntermediate(field.getIndex(), oid);
     }
-
+    
+    Map<JDBCStoreManager.SelectKey, Object[]> relationFieldUnionCache = null;
     public void load(final OpenJPAStateManager sm, final JDBCStore store,
         final JDBCFetchConfiguration fetch)
         throws SQLException {
@@ -625,9 +626,11 @@
         if (!((JDBCStoreManager)store).isQuerySQLCacheOn())
             union = newUnion(sm, store, fetch, rels, subs, resJoins);
         else {
-            Map<JDBCStoreManager.SelectKey, Object[]> relationFieldUnionCache 
= 
-                ((JDBCStoreManager)store).getCacheMapFromQuerySQLCache(
-                RelationFieldStrategy.class);
+            if (relationFieldUnionCache == null) {
+                relationFieldUnionCache =
+                    ((JDBCStoreManager) store)
+                        
.getCacheMapFromQuerySQLCache(RelationFieldStrategy.class);
+            }
             boolean found = true;
             JDBCFetchConfiguration fetchClone = new 
JDBCFetchConfigurationImpl();
             fetchClone.copy(fetch);


Reply via email to