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;