You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/10/29 02:51:14 UTC

svn commit: r830826 - /openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

Author: ppoddar
Date: Thu Oct 29 01:51:14 2009
New Revision: 830826

URL: http://svn.apache.org/viewvc?rev=830826&view=rev
Log:
OPENJPA-1337: Push/Pop fetch plan with find()/refresh()

Modified:
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java

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=830826&r1=830825&r2=830826&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 Oct 29 01:51:14 2009
@@ -486,10 +486,7 @@
     @SuppressWarnings("unchecked")
     public <T> T find(Class<T> cls, Object oid, LockModeType mode, Map<String, Object> properties) {
         assertNotCloseInvoked();
-        if (mode != null && mode != LockModeType.NONE) {
-            _broker.assertActiveTransaction();
-        }
-        processLockProperties(pushFetchPlan(), mode, properties);
+        configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
         try {
             oid = _broker.newObjectId(cls, oid);
             return (T) _broker.find(oid, true, this);
@@ -749,16 +746,13 @@
         refresh(entity, null, properties);
     }
 
-    public void refresh(Object entity, LockModeType mode,
-        Map<String, Object> properties) {
+    public void refresh(Object entity, LockModeType mode, Map<String, Object> properties) {
         assertNotCloseInvoked();
         assertValidAttchedEntity(entity);
-        if (mode != null && mode != LockModeType.NONE) {
-            _broker.assertActiveTransaction();
-        }
+
         _broker.assertWriteOperation();
 
-        processLockProperties(pushFetchPlan(), mode, properties);
+        configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
         try {
             _broker.refresh(entity, this);
         } finally {
@@ -1145,10 +1139,9 @@
         assertNotCloseInvoked();
         assertValidAttchedEntity(entity);
 
-        processLockProperties(pushFetchPlan(), mode, null);
+        configureCurrentFetchPlan(pushFetchPlan(), null, mode, false);
         try {
-            _broker.lock(entity, MixedLockLevelsHelper.toLockLevel(mode),
-                timeout, this);
+            _broker.lock(entity, MixedLockLevelsHelper.toLockLevel(mode),  timeout, this);
         } finally {
             popFetchPlan();
         }
@@ -1159,7 +1152,7 @@
         assertValidAttchedEntity(entity);
         _broker.assertActiveTransaction();
 
-        processLockProperties(pushFetchPlan(), mode, properties);
+        configureCurrentFetchPlan(pushFetchPlan(), properties, mode, false);
         try {
             _broker.lock(entity, MixedLockLevelsHelper.toLockLevel(mode),
                 _broker.getFetchConfiguration().getLockTimeout(), this);
@@ -1607,11 +1600,16 @@
      * Populate the given FetchPlan with the given properties. 
      * Optionally overrides the given lock mode.
      */
-    private void processLockProperties(FetchPlan fetch, LockModeType lock, Map<String, Object> properties) {
+    private void configureCurrentFetchPlan(FetchPlan fetch, Map<String, Object> properties, 
+            LockModeType lock, boolean requiresTxn) {
         // handle properties in map first
+        configureCurrentCacheModes(fetch, properties);
         fetch.addHints(properties);
         // override with the specific lockMode, if needed.
         if (lock != null && lock != LockModeType.NONE) {
+            if (requiresTxn) {
+                _broker.assertActiveTransaction();
+            }
             // Override read lock level
             LockModeType curReadLockMode = fetch.getReadLockMode();
             if (lock != curReadLockMode)
@@ -1619,16 +1617,22 @@
         }
     }
     
-    private void processFetchProperties(FetchPlan fetch, Map<String, Object> properties) {
+    private void configureCurrentCacheModes(FetchPlan fetch, Map<String, Object> properties) {
         if (properties == null)
             return;
-        CacheRetrieveMode rMode = JPAProperties.getCacheRetrieveMode(properties);
-        if (rMode != null) {
-            fetch.setCacheRetrieveMode(DataCacheRetrieveMode.valueOf(rMode.toString()));
-        }
-        CacheStoreMode sMode = JPAProperties.getCacheStoreMode(properties);
+        CacheRetrieveMode rMode = JPAProperties.get(CacheRetrieveMode.class, JPAProperties.CACHE_RETRIEVE_MODE, 
+                properties);
         if (rMode != null) {
-            fetch.setCacheStoreMode(DataCacheStoreMode.valueOf(sMode.toString()));
+            fetch.setCacheRetrieveMode(JPAProperties.convertValue(DataCacheRetrieveMode.class, 
+                    JPAProperties.CACHE_RETRIEVE_MODE, rMode));
+            properties.remove(JPAProperties.CACHE_RETRIEVE_MODE);
+        }
+        CacheStoreMode sMode = JPAProperties.get(CacheStoreMode.class, JPAProperties.CACHE_STORE_MODE, 
+                properties);
+        if (sMode != null) {
+            fetch.setCacheStoreMode(JPAProperties.convertValue(DataCacheStoreMode.class, 
+                    JPAProperties.CACHE_STORE_MODE, sMode));
+            properties.remove(JPAProperties.CACHE_STORE_MODE);
         }
     }
 
@@ -1702,7 +1706,7 @@
      */
     Object convertUserValue(String key, Object value, Class<?> targetType) {
         if (JPAProperties.isValidKey(key)) 
-            return JPAProperties.convertValue(key, value);
+            return JPAProperties.convertValue(targetType, key, value);
         if (value instanceof String) {
             if ("null".equals(value)) {
                 return null;