Author: allee8285
Date: Thu Mar 25 15:09:00 2010
New Revision: 927442

URL: http://svn.apache.org/viewvc?rev=927442&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/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
    
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

Modified: 
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java?rev=927442&r1=927441&r2=927442&view=diff
==============================================================================
--- 
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
 (original)
+++ 
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
 Thu Mar 25 15:09:00 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,7 +130,93 @@ 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/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=927442&r1=927441&r2=927442&view=diff
==============================================================================
--- 
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
 (original)
+++ 
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
 Thu Mar 25 15:09:00 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);


Reply via email to