Author: ppoddar
Date: Fri May 30 11:10:50 2008
New Revision: 661800
URL: http://svn.apache.org/viewvc?rev=661800&view=rev
Log: (empty)
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestDataCacheBehavesIdentical.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java?rev=661800&r1=661799&r2=661800&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
Fri May 30 11:10:50 2008
@@ -29,6 +29,7 @@
import org.apache.openjpa.event.RemoteCommitProvider;
import org.apache.openjpa.kernel.AutoClear;
import org.apache.openjpa.kernel.AutoDetach;
+import org.apache.openjpa.kernel.Broker;
import org.apache.openjpa.kernel.BrokerFactory;
import org.apache.openjpa.kernel.BrokerImpl;
import org.apache.openjpa.kernel.ConnectionRetainModes;
@@ -330,7 +331,37 @@
* @since 0.2.5
*/
public void setDataCacheTimeout(Integer timeout);
-
+
+ /**
+ * Gets whether entity state is to be refreshed from [EMAIL PROTECTED]
DataCache}.
+ * The entities are never refreshed from DataCache if lock is being
applied
+ * (e.g. in a pessimistic transaction) and hence this setting only refers
+ * to behavior when not locking.
+ *
+ * @since 1.1.1
+ */
+ public boolean getRefreshFromDataCache();
+
+ /**
+ * Sets whether entity state is to be refreshed from [EMAIL PROTECTED]
DataCache}.
+ * The entities are never refreshed from DataCache if lock is being
applied
+ * (e.g. in a pessimistic transaction) and hence this setting only refers
+ * to behavior when not locking.
+ *
+ * @since 1.1.
+ */
+ public void setRefreshFromDataCache(boolean refreshFromDataCache);
+
+ /**
+ * Sets whether entity state is to be refreshed from [EMAIL PROTECTED]
DataCache}.
+ * The entities are never refreshed from DataCache if lock is being
applied
+ * (e.g. in a pessimistic transaction) and hence this setting only refers
+ * to behavior when not locking.
+ *
+ * @since 1.1.1
+ */
+ public void setRefreshFromDataCache(Boolean refreshFromDataCache);
+
/**
* The plugin to use for level-2 data store query caching.
*
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?rev=661800&r1=661799&r2=661800&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
Fri May 30 11:10:50 2008
@@ -122,6 +122,7 @@
public BooleanValue ignoreChanges;
public BooleanValue nontransactionalRead;
public BooleanValue nontransactionalWrite;
+ public BooleanValue refreshFromDataCache;
public BooleanValue multithreaded;
public StringValue mapping;
public PluginValue metaFactoryPlugin;
@@ -222,7 +223,12 @@
queryCachePlugin.setAliases(aliases);
queryCachePlugin.setDefault(aliases[0]);
queryCachePlugin.setString(aliases[0]);
-
+
+ refreshFromDataCache = addBoolean("RefreshFromDataCache");
+ refreshFromDataCache.setDefault("false");
+ refreshFromDataCache.set(false);
+ refreshFromDataCache.setDynamic(true);
+
dynamicDataStructs = addBoolean("DynamicDataStructs");
dynamicDataStructs.setDefault("false");
dynamicDataStructs.set(false);
@@ -644,6 +650,20 @@
public String getQueryCache() {
return queryCachePlugin.getString();
}
+
+ public boolean getRefreshFromDataCache() {
+ return refreshFromDataCache.get();
+ }
+
+ public void setRefreshFromDataCache(boolean flag) {
+ refreshFromDataCache.set(flag);
+ }
+
+ public void setRefreshFromDataCache(Boolean flag) {
+ if (flag != null) {
+ refreshFromDataCache.set(flag.booleanValue());
+ }
+ }
public boolean getDynamicDataStructs() {
return dynamicDataStructs.get();
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=661800&r1=661799&r2=661800&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
Fri May 30 11:10:50 2008
@@ -423,8 +423,12 @@
public Collection loadAll(Collection sms, PCState state, int load,
FetchConfiguration fetch, Object edata) {
- if (load == StoreManager.FORCE_LOAD_REFRESH || isLocking(fetch))
- return super.loadAll(sms, state, load, fetch, edata);
+ if (isLocking(fetch) ||
+ (!isLocking(fetch) &&
+ (load == StoreManager.FORCE_LOAD_REFRESH)
+ && !_ctx.getConfiguration().getRefreshFromDataCache())) {
+ return super.loadAll(sms, state, load, fetch, edata);
+ }
Map unloaded = null;
List smList = null;
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestDataCacheBehavesIdentical.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestDataCacheBehavesIdentical.java?rev=661800&r1=661799&r2=661800&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestDataCacheBehavesIdentical.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestDataCacheBehavesIdentical.java
Fri May 30 11:10:50 2008
@@ -286,10 +286,11 @@
*/
public void verifyRefresh(boolean useDataCache, LockModeType lock,
- boolean makeDirtyBeforeRefresh, String expected) {
+ boolean makeDirtyBeforeRefresh, boolean
refreshFromDataCache,
+ String expected) {
OpenJPAEntityManagerFactorySPI emf = (useDataCache)
? emfWithDataCache : emfWithoutDataCache;
-
+
emf.getConfiguration().setRefreshFromDataCache(refreshFromDataCache);
OpenJPAEntityManagerSPI em = emf.createEntityManager();
em.getTransaction().begin();
@@ -364,39 +365,59 @@
}
public void testDirtyRefreshWithNoLockHitsDatabase() {
- verifyRefresh(WITH_DATACACHE, NOLOCK, DIRTY, MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, NOLOCK, DIRTY, false,
MARKER_DATABASE);
+ }
+
+ public void testDirtyRefreshWithNoLockHitsDataCache() {
+ verifyRefresh(WITH_DATACACHE, NOLOCK, DIRTY, true,
MARKER_DATACACHE);
}
public void testCleanRefreshWithNoLockHitsDatabase() {
- verifyRefresh(WITH_DATACACHE, NOLOCK, !DIRTY, MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, NOLOCK, !DIRTY, false,
MARKER_DATABASE);
+ }
+
+ public void testCleanRefreshWithNoLockHitsDataCache() {
+ verifyRefresh(WITH_DATACACHE, NOLOCK, !DIRTY, true,
MARKER_DATACACHE);
}
public void testDirtyRefreshWithReadLockHitsDatabase() {
- verifyRefresh(WITH_DATACACHE, LockModeType.READ, DIRTY,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.READ, DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.READ, DIRTY, false,
MARKER_DATABASE);
}
public void testCleanRefreshWithReadLockHitsDatabase() {
- verifyRefresh(WITH_DATACACHE, LockModeType.READ, !DIRTY,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.READ, !DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.READ, !DIRTY, false,
MARKER_DATABASE);
}
public void testDirtyRefreshWithWriteLockHitsDatabase() {
- verifyRefresh(WITH_DATACACHE, LockModeType.WRITE, DIRTY,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.WRITE, DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.WRITE, DIRTY, false,
MARKER_DATABASE);
}
public void testCleanRefreshWithWriteLockHitsDatabase() {
- verifyRefresh(WITH_DATACACHE, LockModeType.WRITE, !DIRTY,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.WRITE, !DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(WITH_DATACACHE, LockModeType.WRITE, !DIRTY,
false, MARKER_DATABASE);
}
public void testDirtyRefreshWithoutDataCacheAlwaysHitsDatabase() {
- verifyRefresh(!WITH_DATACACHE, NOLOCK, DIRTY, MARKER_DATABASE);
- verifyRefresh(!WITH_DATACACHE, LockModeType.READ, DIRTY,
MARKER_DATABASE);
- verifyRefresh(!WITH_DATACACHE, LockModeType.WRITE, DIRTY,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, NOLOCK, DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.READ, DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.WRITE, DIRTY, true,
MARKER_DATABASE);
+
+ verifyRefresh(!WITH_DATACACHE, NOLOCK, DIRTY, false,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.READ, DIRTY, false,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.WRITE, DIRTY,
false, MARKER_DATABASE);
}
public void testCleanRefreshWithoutDataCacheAlwaysHitsDatabase() {
- verifyRefresh(!WITH_DATACACHE, NOLOCK, !DIRTY, MARKER_DATABASE);
- verifyRefresh(!WITH_DATACACHE, LockModeType.READ, !DIRTY,
MARKER_DATABASE);
- verifyRefresh(!WITH_DATACACHE, LockModeType.WRITE, !DIRTY,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, NOLOCK, !DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.READ, !DIRTY, true,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.WRITE, !DIRTY,
true, MARKER_DATABASE);
+
+ verifyRefresh(!WITH_DATACACHE, NOLOCK, !DIRTY, false,
MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.READ, !DIRTY,
false, MARKER_DATABASE);
+ verifyRefresh(!WITH_DATACACHE, LockModeType.WRITE, !DIRTY,
false, MARKER_DATABASE);
}
/**