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);