You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jg...@apache.org on 2013/10/16 22:12:11 UTC

svn commit: r1532882 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-kernel/src/main/java/org/apache/openjpa/conf/ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/

Author: jgrassel
Date: Wed Oct 16 20:12:10 2013
New Revision: 1532882

URL: http://svn.apache.org/r1532882
Log:
OPENJPA-2414: FinderCache does not consider active Fetch Groups/FetchPlan added Fields

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java?rev=1532882&r1=1532881&r2=1532882&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java Wed Oct 16 20:12:10 2013
@@ -108,8 +108,7 @@ public class FinderCacheImpl 
             return null;
         }
         
-        // FinderCache only operates with Default Fetch Plans
-        if (!fetch.isDefaultPUFetchGroupConfigurationOnly()) {
+        if (!fetch.isFetchConfigurationSQLCacheAdmissible()) {
             return null;
         }
         
@@ -151,8 +150,7 @@ public class FinderCacheImpl 
                 return null;
             }
             
-            // FinderCache only operates with Default Fetch Plans
-            if (!fetch.isDefaultPUFetchGroupConfigurationOnly()) {
+            if (!fetch.isFetchConfigurationSQLCacheAdmissible()) {
                 return null;
             }           
             

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java?rev=1532882&r1=1532881&r2=1532882&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java Wed Oct 16 20:12:10 2013
@@ -77,6 +77,7 @@ public class Compatibility {
     private boolean _singletonLifecycleEventManager = false;
     private boolean _filterPCRegistryClasses = false; // OPENJPA-2288
     private boolean _returnNullOnEmptyAggregateResult = true;   // OPENJPA-1794
+    private boolean _cacheNonDefaultFetchPlanQueries = false; // OPENJPA-2414
 
     /**
      * Whether to require exact identity value types when creating object
@@ -763,4 +764,18 @@ public class Compatibility {
     public void setReturnNullOnAggregateResult(boolean returnNullOnEmptyAggregateResult) {
         _returnNullOnEmptyAggregateResult = returnNullOnEmptyAggregateResult;
     }
+    
+    /**
+     * Whether the SQL generated for queries executed with a modified fetch plan are cached.
+     */
+    public boolean  getCacheNonDefaultFetchPlanQueries() { 
+        return _cacheNonDefaultFetchPlanQueries;
+    }
+    
+    /**
+     * Whether the SQL generated for queries executed with a modified fetch plan are cached.
+     */
+    public void setCacheNonDefaultFetchPlanQueries(boolean bool) {
+        _cacheNonDefaultFetchPlanQueries = bool;
+    }
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java?rev=1532882&r1=1532881&r2=1532882&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java Wed Oct 16 20:12:10 2013
@@ -595,4 +595,12 @@ public class DelegatingFetchConfiguratio
             throw translate(re);
         }
     }
+    
+    public boolean isFetchConfigurationSQLCacheAdmissible() {
+        try {
+            return _fetch.isFetchConfigurationSQLCacheAdmissible();
+        } catch (RuntimeException re) {
+            throw translate(re);
+        }
+    }
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java?rev=1532882&r1=1532881&r2=1532882&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java Wed Oct 16 20:12:10 2013
@@ -474,4 +474,9 @@ public interface FetchConfiguration
      * @since 0.4.1
      */
     public FetchConfiguration traverse(FieldMetaData fm);
+    
+    /**
+     * Whether SQL generated by the FetchConfiguration's current configuration should be cached.
+     */
+    public boolean isFetchConfigurationSQLCacheAdmissible();
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java?rev=1532882&r1=1532881&r2=1532882&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java Wed Oct 16 20:12:10 2013
@@ -148,7 +148,8 @@ public class FetchConfigurationImpl
         public boolean fetchGroupIsPUDefault = false;
         public boolean extendedPathLookup = false;
         public DataCacheRetrieveMode cacheRetrieveMode = DataCacheRetrieveMode.USE;
-        public DataCacheStoreMode cacheStoreMode = DataCacheStoreMode.USE;        
+        public DataCacheStoreMode cacheStoreMode = DataCacheStoreMode.USE;
+        public boolean cacheNonDefaultFetchPlanQueries = false;
     }
 
     private final ConfigurationState _state;
@@ -193,6 +194,8 @@ public class FetchConfigurationImpl
         
         addFetchGroups(Arrays.asList(fetchGroupList));
         setMaxFetchDepth(conf.getMaxFetchDepth());
+        
+        _state.cacheNonDefaultFetchPlanQueries = conf.getCompatibilityInstance().getCacheNonDefaultFetchPlanQueries();
     }
 
     /**
@@ -201,6 +204,7 @@ public class FetchConfigurationImpl
     public Object clone() {
         FetchConfigurationImpl clone = newInstance(null);
         clone._state.ctx = _state.ctx;
+        clone._state.cacheNonDefaultFetchPlanQueries = _state.cacheNonDefaultFetchPlanQueries;
         clone._parent = _parent;
         clone._fromField = _fromField;
         clone._fromType = _fromType;
@@ -346,7 +350,7 @@ public class FetchConfigurationImpl
         return addFetchGroup(name, true);
     }
      
-    public FetchConfiguration addFetchGroup(String name, boolean recomputeIsDefault) {
+    private FetchConfiguration addFetchGroup(String name, boolean recomputeIsDefault) {
         if (StringUtils.isEmpty(name))
             throw new UserException(_loc.get("null-fg"));
 
@@ -383,7 +387,7 @@ public class FetchConfigurationImpl
         return removeFetchGroup(group, true);
     }
 
-    public FetchConfiguration removeFetchGroup(String group, boolean recomputeIsDefault) {
+    private FetchConfiguration removeFetchGroup(String group, boolean recomputeIsDefault) {
         lock();
         try {
             if (_state.fetchGroups != null) {
@@ -483,6 +487,15 @@ public class FetchConfigurationImpl
         return _state.fetchGroupIsPUDefault;
     }
 
+    public boolean isFetchConfigurationSQLCacheAdmissible() {
+        if (_state == null || _state.cacheNonDefaultFetchPlanQueries) {
+            return false;
+        } else {
+            // Only pctx-default matching FetchConfiguration generated SQL is cache permissible
+            return _state.fetchGroupIsPUDefault;
+        }
+    }
+    
     public Set<String> getFields() {
         if (_state.fields == null) return Collections.emptySet();
         return _state.fields;
@@ -518,6 +531,7 @@ public class FetchConfigurationImpl
                 _state.fields = new HashSet<String>();
             _state.fields.addAll(fields);
         } finally {
+            verifyDefaultPUFetchGroups();
             unlock();
         }
         return this;