Author: jgrassel
Date: Wed Oct 16 15:28:01 2013
New Revision: 1532797
URL: http://svn.apache.org/r1532797
Log:
OPENJPA-2414: FinderCache does not consider active Fetch Groups/FetchPlan added
Fields
Modified:
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
Modified:
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java?rev=1532797&r1=1532796&r2=1532797&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java
(original)
+++
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderCacheImpl.java
Wed Oct 16 15:28:01 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/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java?rev=1532797&r1=1532796&r2=1532797&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
(original)
+++
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
Wed Oct 16 15:28:01 2013
@@ -77,6 +77,7 @@ public class Compatibility {
private boolean _singletonLifecycleEventManager = false;
private boolean _filterPCRegistryClasses = false; // OPENJPA-2288
private boolean _returnNullOnEmptyAggregateResult = false; //
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/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java?rev=1532797&r1=1532796&r2=1532797&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
(original)
+++
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
Wed Oct 16 15:28:01 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/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java?rev=1532797&r1=1532796&r2=1532797&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
(original)
+++
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
Wed Oct 16 15:28:01 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/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java?rev=1532797&r1=1532796&r2=1532797&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
(original)
+++
openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
Wed Oct 16 15:28:01 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;
@@ -190,6 +191,8 @@ public class FetchConfigurationImpl
clearFetchGroups();
addFetchGroups(Arrays.asList(conf.getFetchGroupsList()));
setMaxFetchDepth(conf.getMaxFetchDepth());
+
+ _state.cacheNonDefaultFetchPlanQueries =
conf.getCompatibilityInstance().getCacheNonDefaultFetchPlanQueries();
}
/**
@@ -198,6 +201,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;
@@ -343,7 +347,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"));
@@ -380,7 +384,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) {
@@ -432,10 +436,7 @@ public class FetchConfigurationImpl
if (_state.ctx != null)
addFetchGroups(Arrays.asList(_state.ctx.getConfiguration().
getFetchGroupsList()));
-
- _state.fetchGroupIsPUDefault = true;
- verifyDefaultPUFetchGroups();
-
+
return this;
}
@@ -468,6 +469,15 @@ public class FetchConfigurationImpl
public boolean isDefaultPUFetchGroupConfigurationOnly() {
return _state.fetchGroupIsPUDefault;
}
+
+ public boolean isFetchConfigurationSQLCacheAdmissible() {
+ if (_state == null || _state.cacheNonDefaultFetchPlanQueries) {
+ return true;
+ } 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();
@@ -504,6 +514,7 @@ public class FetchConfigurationImpl
_state.fields = new HashSet<String>();
_state.fields.addAll(fields);
} finally {
+ verifyDefaultPUFetchGroups();
unlock();
}
return this;