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