Author: ppoddar
Date: Wed Mar 31 23:13:45 2010
New Revision: 929744
URL: http://svn.apache.org/viewvc?rev=929744&view=rev
Log:
data initializilation from data cache - use input fetch, not the conetxt
configuration; reduce checks
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java?rev=929744&r1=929743&r2=929744&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java
Wed Mar 31 23:13:45 2010
@@ -152,4 +152,9 @@ public class ConcurrentDataCache
protected boolean unpinInternal(Object key) {
return _cache.unpin (key);
}
+
+ protected boolean recacheUpdates() {
+ return true;
+ }
+
}
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java?rev=929744&r1=929743&r2=929744&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java
Wed Mar 31 23:13:45 2010
@@ -290,7 +290,7 @@ public class DataCacheStoreManager
edata.set(i);
}
}
- if(edata.cardinality()==oids.size()){
+ if (edata.cardinality() == oids.size()){
return true;
}
}
@@ -323,36 +323,33 @@ public class DataCacheStoreManager
}
public boolean initialize(OpenJPAStateManager sm, PCState state,
FetchConfiguration fetch, Object edata) {
- boolean fromDatabase;
DataCache cache = _mgr.selectCache(sm);
- DataCachePCData data = null;
- boolean updateCache =
_ctx.getFetchConfiguration().getCacheRetrieveMode() !=
DataCacheRetrieveMode.BYPASS
- && _ctx.getPopulateDataCache();
- if (cache == null || sm.isEmbedded()
- || _ctx.getFetchConfiguration().getCacheRetrieveMode() ==
DataCacheRetrieveMode.BYPASS
- || _ctx.getFetchConfiguration().getCacheStoreMode() ==
DataCacheStoreMode.REFRESH) {
+ if (cache == null) {
+ return super.initialize(sm, state, fetch, edata);
+ }
+ DataCachePCData data = cache.get(sm.getObjectId());
+ boolean fromDatabase = false;
+ boolean alreadyCached = data != null;
+ if (sm.isEmbedded()
+ || fetch.getCacheRetrieveMode() == DataCacheRetrieveMode.BYPASS
+ || fetch.getCacheStoreMode() == DataCacheStoreMode.REFRESH) {
fromDatabase = super.initialize(sm, state, fetch, edata);
} else {
- data = cache.get(sm.getObjectId());
- if (data != null && !isLocking(fetch)) {
- //### the 'data.type' access here probably needs to be
- //### addressed for bug 511
+ if (alreadyCached && !isLocking(fetch)) {
sm.initialize(data.getType(), state);
data.load(sm, fetch, edata);
- // no need to update the cache.
- updateCache = false;
- fromDatabase = true;
} else {
- // initialize from store manager
fromDatabase = super.initialize(sm, state, fetch, edata);
}
}
-
- if (cache != null && (fromDatabase && updateCache)) {
- // update cache if the result came from the database and
configured to store or refresh the cache.
+ // update cache if the result came from the database and configured to
use or refresh the cache.
+ boolean updateCache = fromDatabase && _ctx.getPopulateDataCache()
+ && ((fetch.getCacheStoreMode() ==
DataCacheStoreMode.USE && !alreadyCached)
+ || (fetch.getCacheStoreMode() ==
DataCacheStoreMode.REFRESH));
+ if (updateCache) {
cacheStateManager(cache, sm, data);
}
- return fromDatabase;
+ return fromDatabase || alreadyCached;
}
private void cacheStateManager(DataCache cache, OpenJPAStateManager sm,
DataCachePCData data) {
@@ -387,7 +384,7 @@ public class DataCacheStoreManager
public boolean load(OpenJPAStateManager sm, BitSet fields,
FetchConfiguration fetch, int lockLevel, Object edata) {
DataCache cache = _mgr.selectCache(sm);
- if (cache == null || sm.isEmbedded() ||
bypass(_ctx.getFetchConfiguration(), StoreManager.FORCE_LOAD_NONE))
+ if (cache == null || sm.isEmbedded() || bypass(fetch,
StoreManager.FORCE_LOAD_NONE))
return super.load(sm, fields, fetch, lockLevel, edata);
DataCachePCData data = cache.get(sm.getObjectId());
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=929744&r1=929743&r2=929744&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 Mar 31 23:13:45 2010
@@ -146,8 +146,8 @@ public class FetchConfigurationImpl
public boolean fetchGroupContainsDefault = false;
public boolean fetchGroupContainsAll = false;
public boolean extendedPathLookup = false;
- public DataCacheRetrieveMode cacheRetrieveMode;
- public DataCacheStoreMode cacheStoreMode;
+ public DataCacheRetrieveMode cacheRetrieveMode =
DataCacheRetrieveMode.USE;
+ public DataCacheStoreMode cacheStoreMode = DataCacheStoreMode.USE;
}
private final ConfigurationState _state;