You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2010/08/02 21:31:45 UTC
svn commit: r981664 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/datacache/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cache/jpa/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/d...
Author: curtisr7
Date: Mon Aug 2 19:31:45 2010
New Revision: 981664
URL: http://svn.apache.org/viewvc?rev=981664&view=rev
Log:
OPENJPA-1757: Check CacheRetrieveMode in DataCacheStoreManager when synchronizing version.
Modified:
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/cache/jpa/AbstractCacheModeTestCase.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/datacache/DataCacheStoreManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheStoreManager.java?rev=981664&r1=981663&r2=981664&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 Mon Aug 2 19:31:45 2010
@@ -300,14 +300,16 @@ public class DataCacheStoreManager
public boolean syncVersion(OpenJPAStateManager sm, Object edata) {
DataCache cache = _mgr.selectCache(sm);
- if (cache == null || sm.isEmbedded())
+ FetchConfiguration fc = sm.getContext().getFetchConfiguration();
+ if (cache == null || sm.isEmbedded() || fc.getCacheRetrieveMode() == DataCacheRetrieveMode.BYPASS) {
return super.syncVersion(sm, edata);
-
+ }
+
DataCachePCData data;
Object version = null;
data = cache.get(sm.getObjectId());
if (!isLocking(null) && data != null)
- version = data.getVersion();
+ version = data.getVersion();
// if we have a cached version update from there
if (version != null) {
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cache/jpa/AbstractCacheModeTestCase.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cache/jpa/AbstractCacheModeTestCase.java?rev=981664&r1=981663&r2=981664&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cache/jpa/AbstractCacheModeTestCase.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cache/jpa/AbstractCacheModeTestCase.java Mon Aug 2 19:31:45 2010
@@ -24,11 +24,13 @@ import javax.persistence.Cache;
import javax.persistence.CacheRetrieveMode;
import javax.persistence.CacheStoreMode;
import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
import org.apache.openjpa.jdbc.meta.ClassMapping;
import org.apache.openjpa.lib.jdbc.AbstractJDBCListener;
import org.apache.openjpa.lib.jdbc.JDBCEvent;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
import org.apache.openjpa.persistence.cache.jpa.model.CacheEntity;
import org.apache.openjpa.persistence.cache.jpa.model.CacheableEntity;
import org.apache.openjpa.persistence.cache.jpa.model.NegatedCachableEntity;
@@ -347,6 +349,31 @@ public abstract class AbstractCacheModeT
entityManagerStoreModeTest(CacheStoreMode.USE, CacheStoreMode.USE, true, true, 1);
}
}
+
+ public void testRefresh() {
+ if (getCacheEnabled()) {
+ OpenJPAEntityManagerSPI em = getEntityManagerFactory().createEntityManager();
+ CacheableEntity e1 = em.find(CacheableEntity.class, 1);
+ XmlCacheableEntity e2 = em.find(XmlCacheableEntity.class, 1);
+ assertNotNull(e1);
+ assertNotNull(e2);
+ int e1Version = e1.getVersion();
+ int e2Version = e2.getVersion();
+
+ String e1Sql = "UPDATE CacheableEntity SET VERSION=?1 WHERE ID=?2";
+ String e2Sql = "UPDATE XmlCacheableEntity SET VERSION=?1 WHERE ID=?2";
+ em.getTransaction().begin();
+ assertEquals(1, em.createNativeQuery(e1Sql).setParameter(1, e1Version + 1).setParameter(2, e1.getId())
+ .executeUpdate());
+ assertEquals(1, em.createNativeQuery(e2Sql).setParameter(1, e2Version + 1).setParameter(2, e2.getId())
+ .executeUpdate());
+ em.getTransaction().commit();
+ em.refresh(e1);
+ em.refresh(e2);
+ assertEquals(e1Version + 1, e1.getVersion());
+ assertEquals(e2Version + 1, e2.getVersion());
+ }
+ }
public void testStoreModeUseRefresh() {
if (getCacheEnabled()) {
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=981664&r1=981663&r2=981664&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 Mon Aug 2 19:31:45 2010
@@ -522,7 +522,7 @@ public class TestDataCacheBehavesIdentic
}
public void testDeleteIsNotDetectedOnCleanRefreshWithoutLockWithDataCache() {
- verifyDeleteDetectionOnRefresh(WITH_DATACACHE, !DIRTY, NOLOCK, NO_ERROR);
+ verifyDeleteDetectionOnRefresh(WITH_DATACACHE, !DIRTY, NOLOCK, ENTITY_NOT_FOUND_ERROR);
}
public void testDeleteIsDetectedOnCleanRefreshWithLockWithDataCache() {