You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by al...@apache.org on 2010/03/25 16:08:56 UTC

svn commit: r927441 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

Author: allee8285
Date: Thu Mar 25 15:08:55 2010
New Revision: 927441

URL: http://svn.apache.org/viewvc?rev=927441&view=rev
Log:
OPENJPA-1599 - Push Cache*Mode value(s) in fetch configuration set from property making the property value(s) only valid during the em method call.

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java?rev=927441&r1=927440&r2=927441&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java Thu Mar 25 15:08:55 2010
@@ -18,15 +18,12 @@
  */
 package org.apache.openjpa.persistence.simple;
 
-import java.sql.Connection;
-import java.sql.SQLException;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.persistence.CacheRetrieveMode;
 import javax.persistence.CacheStoreMode;
-import javax.persistence.EntityManager;
 
-import org.apache.openjpa.kernel.Broker;
 import org.apache.openjpa.persistence.JPAProperties;
 import org.apache.openjpa.persistence.OpenJPAEntityManager;
 import org.apache.openjpa.persistence.test.SingleEMTestCase;
@@ -133,6 +130,92 @@ public class TestRefresh extends SingleE
         }
     }
     
+    public void testFindWithCacheRetrieveProperty() {
+        String key = "Test property in find.";
+        OpenJPAEntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        Item item = new Item();
+        item.setItemData(key);
+        em.persist(item);
+        em.flush();
+        em.getTransaction().commit();
+        int id = item.getItemId();
+        em.clear();
+        emf.getCache().evictAll();
+
+        assertEquals(key, item.getItemData());
+
+        em.setProperty(JPAProperties.CACHE_STORE_MODE, CacheStoreMode.USE);
+        em.setProperty(JPAProperties.CACHE_RETRIEVE_MODE, CacheRetrieveMode.USE);
+        Map<String, Object> properties = em.getProperties();
+        if (!properties.containsKey(JPAProperties.CACHE_STORE_MODE)) {
+            System.err.println(properties);
+            fail("Expected " + JPAProperties.CACHE_STORE_MODE + " properties be returned");
+        }
+        if (!properties.containsKey(JPAProperties.CACHE_RETRIEVE_MODE)) {
+            System.err.println(properties);
+            fail("Expected " + JPAProperties.CACHE_RETRIEVE_MODE + " properties be returned");
+        }
+        Map<String, Object> paramProperties = new HashMap<String, Object>();
+        paramProperties.put(JPAProperties.CACHE_STORE_MODE, CacheStoreMode.BYPASS);
+        paramProperties.put(JPAProperties.CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS);
+        Item fItem = em.find(Item.class, id, paramProperties);
+        assertEquals(fItem.getItemData(), key);
+        assertNotCached(Item.class, id);
+
+        Object mode = em.getProperties().get(JPAProperties.CACHE_STORE_MODE);
+        assertEquals(mode, CacheStoreMode.USE);        
+        mode = em.getProperties().get(JPAProperties.CACHE_RETRIEVE_MODE);
+        assertEquals(mode, CacheRetrieveMode.USE);        
+    }
+
+    public void testRefreshWithCacheRetrieveProperty() {
+        String key = "Test property in refresh.";
+        String updatedKey = "Updated test property in refresh.";
+        OpenJPAEntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        Item item = new Item();
+        item.setItemData(key);
+        em.persist(item);
+        em.flush();
+        em.getTransaction().commit();
+        assertEquals(key, item.getItemData());
+        
+        int id = item.getItemId();
+        emf.getCache().evictAll();
+
+        assertEquals(key, item.getItemData());
+
+        em.setProperty(JPAProperties.CACHE_STORE_MODE, CacheStoreMode.USE);
+        em.setProperty(JPAProperties.CACHE_RETRIEVE_MODE, CacheRetrieveMode.USE);
+        Map<String, Object> properties = em.getProperties();
+        if (!properties.containsKey(JPAProperties.CACHE_STORE_MODE)) {
+            System.err.println(properties);
+            fail("Expected " + JPAProperties.CACHE_STORE_MODE + " properties be returned");
+        }
+        if (!properties.containsKey(JPAProperties.CACHE_RETRIEVE_MODE)) {
+            System.err.println(properties);
+            fail("Expected " + JPAProperties.CACHE_RETRIEVE_MODE + " properties be returned");
+        }
+        Map<String, Object> paramProperties = new HashMap<String, Object>();
+        paramProperties.put(JPAProperties.CACHE_STORE_MODE, CacheStoreMode.BYPASS);
+        paramProperties.put(JPAProperties.CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS);
+        Item fItem = em.find(Item.class, id, paramProperties);
+        assertEquals(key, fItem.getItemData());
+        assertNotCached(Item.class, id);
+
+        fItem.setItemData(updatedKey);
+        assertEquals(updatedKey, fItem.getItemData());
+
+        em.refresh(fItem, paramProperties);
+        assertEquals(key, fItem.getItemData());
+        assertNotCached(Item.class, id);
+
+        Object mode = em.getProperties().get(JPAProperties.CACHE_STORE_MODE);
+        assertEquals(mode, CacheStoreMode.USE);        
+        mode = em.getProperties().get(JPAProperties.CACHE_RETRIEVE_MODE);
+        assertEquals(mode, CacheRetrieveMode.USE);        
+    }
     
     void assertCached(Class<?> cls, Object oid) {
         assertTrue(cls + ":" + oid + " should be in L2 cache, but not", emf.getCache().contains(cls, oid));

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=927441&r1=927440&r2=927441&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java Thu Mar 25 15:08:55 2010
@@ -487,8 +487,8 @@ public class EntityManagerImpl
     @SuppressWarnings("unchecked")
     public <T> T find(Class<T> cls, Object oid, LockModeType mode, Map<String, Object> properties) {
         assertNotCloseInvoked();
-        configureCurrentCacheModes(getFetchPlan(), properties);
-        configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
+        configureCurrentCacheModes(pushFetchPlan(), properties);
+        configureCurrentFetchPlan(getFetchPlan(), properties, mode, true);
         try {
             oid = _broker.newObjectId(cls, oid);
             return (T) _broker.find(oid, true, this);
@@ -765,7 +765,6 @@ public class EntityManagerImpl
                 Log log = _broker.getConfiguration().getConfigurationLog();
                 log.warn(_loc.get("cache-retrieve-override", Exceptions.toString(entity)));
             }
-                
         }
         try {
             _broker.refresh(entity, this);
@@ -1187,8 +1186,8 @@ public class EntityManagerImpl
         assertNotCloseInvoked();
         assertValidAttchedEntity(LOCK, entity);
         _broker.assertActiveTransaction();
-        configureCurrentCacheModes(getFetchPlan(), properties);
-        configureCurrentFetchPlan(pushFetchPlan(), properties, mode, false);
+        configureCurrentCacheModes(pushFetchPlan(), properties);
+        configureCurrentFetchPlan(getFetchPlan(), properties, mode, false);
         try {
             _broker.lock(entity, MixedLockLevelsHelper.toLockLevel(mode),
                 _broker.getFetchConfiguration().getLockTimeout(), this);