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() {