You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/09/10 18:12:32 UTC

[32/34] isis git commit: ISIS-1194: inlining postLoadProcessingFor from FrameworkSynchronizer to PersistenceSession

ISIS-1194: inlining postLoadProcessingFor from FrameworkSynchronizer to PersistenceSession


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/be852c94
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/be852c94
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/be852c94

Branch: refs/heads/ISIS-1194
Commit: be852c94d745e517fc9feedb80fcac9e5be257ee
Parents: 9a72f3a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Sep 10 16:55:36 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Sep 10 16:55:36 2015 +0100

----------------------------------------------------------------------
 .../persistence/FrameworkSynchronizer.java      | 69 --------------------
 .../system/persistence/PersistenceSession.java  | 68 ++++++++++++++++++-
 ...rsistenceQueryFindAllInstancesProcessor.java |  2 +-
 ...tenceQueryFindUsingApplibQueryProcessor.java |  2 +-
 .../PersistenceQueryProcessorAbstract.java      |  7 +-
 5 files changed, 69 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/be852c94/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/FrameworkSynchronizer.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/FrameworkSynchronizer.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/FrameworkSynchronizer.java
index ec2ce96..026796f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/FrameworkSynchronizer.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/FrameworkSynchronizer.java
@@ -71,75 +71,6 @@ public class FrameworkSynchronizer {
     }
 
 
-    public void postLoadProcessingFor(final Persistable pojo, CalledFrom calledFrom) {
-
-        withLogging(pojo, new Runnable() {
-            @Override
-            public void run() {
-                final Persistable pc = pojo;
-                
-                // need to do eagerly, because (if a viewModel then) a
-                // viewModel's #viewModelMemento might need to use services 
-                persistenceSession.injectServicesInto(pojo);
-                
-                final Version datastoreVersion = getVersionIfAny(pc);
-                
-                final RootOid originalOid ;
-                ObjectAdapter adapter = persistenceSession.getAdapterFor(pojo);
-                if(adapter != null) {
-                    ensureRootObject(pojo);
-                    originalOid = (RootOid) adapter.getOid();
-
-                    final Version originalVersion = adapter.getVersion();
-
-                    // sync the pojo held by the adapter with that just loaded
-                    persistenceSession.remapRecreatedPojo(adapter, pojo);
-                    
-                    // since there was already an adapter, do concurrency check
-                    // (but don't set abort cause if checking is suppressed through thread-local)
-                    final RootOid thisOid = originalOid;
-                    final Version thisVersion = originalVersion;
-                    final Version otherVersion = datastoreVersion;
-                    
-                    if(thisVersion != null && 
-                       otherVersion != null && 
-                       thisVersion.different(otherVersion)) {
-
-                        if(ConcurrencyChecking.isCurrentlyEnabled()) {
-                            LOG.info("concurrency conflict detected on " + thisOid + " (" + otherVersion + ")");
-                            final String currentUser = authenticationSession.getUserName();
-                            final ConcurrencyException abortCause = new ConcurrencyException(currentUser, thisOid, thisVersion, otherVersion);
-                            persistenceSession.getCurrentTransaction().setAbortCause(abortCause);
-
-                        } else {
-                            LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion + ")");
-                        }
-                    }
-                } else {
-                    originalOid = persistenceSession.createPersistentOrViewModelOid(pojo);
-                    
-                    // it appears to be possible that there is already an adapter for this Oid, 
-                    // ie from ObjectStore#resolveImmediately()
-                    adapter = persistenceSession.getAdapterFor(originalOid);
-                    if(adapter != null) {
-                        persistenceSession.remapRecreatedPojo(adapter, pojo);
-                    } else {
-                        adapter = persistenceSession.mapRecreatedPojo(originalOid, pojo);
-                        CallbackFacet.Util.callCallback(adapter, LoadedCallbackFacet.class);
-                    }
-                }
-
-                adapter.setVersion(datastoreVersion);
-            }
-        }, calledFrom);
-    }
-
-
-
-
-
-
-
 
 
     // /////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/be852c94/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index d458e7b..80795e7 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -55,9 +55,11 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedCallbackFacet;
+import org.apache.isis.core.metamodel.facets.object.callbacks.LoadedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.PersistedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.PersistingCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingCallbackFacet;
@@ -839,8 +841,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         // possibly redundant because also called in the post-load event
         // listener, but (with JPA impl) found it was required if we were ever to
         // get an eager left-outer-join as the result of a refresh (sounds possible).
-        frameworkSynchronizer.postLoadProcessingFor((Persistable) domainObject,
-                FrameworkSynchronizer.CalledFrom.OS_RESOLVE);
+        postLoadProcessingFor((Persistable) domainObject, FrameworkSynchronizer.CalledFrom.OS_RESOLVE);
     }
     //endregion
 
@@ -1254,7 +1255,68 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
 
     public void postLoadProcessingFor(final Persistable pojo, FrameworkSynchronizer.CalledFrom calledFrom) {
-        frameworkSynchronizer.postLoadProcessingFor(pojo, calledFrom);
+
+        withLogging(pojo, new Runnable() {
+            @Override
+            public void run() {
+                final Persistable pc = pojo;
+
+                // need to do eagerly, because (if a viewModel then) a
+                // viewModel's #viewModelMemento might need to use services
+                injectServicesInto(pojo);
+
+                final Version datastoreVersion = getVersionIfAny(pc);
+
+                final RootOid originalOid;
+                ObjectAdapter adapter = getAdapterFor(pojo);
+                if (adapter != null) {
+                    ensureRootObject(pojo);
+                    originalOid = (RootOid) adapter.getOid();
+
+                    final Version originalVersion = adapter.getVersion();
+
+                    // sync the pojo held by the adapter with that just loaded
+                    remapRecreatedPojo(adapter, pojo);
+
+                    // since there was already an adapter, do concurrency check
+                    // (but don't set abort cause if checking is suppressed through thread-local)
+                    final RootOid thisOid = originalOid;
+                    final Version thisVersion = originalVersion;
+                    final Version otherVersion = datastoreVersion;
+
+                    if (thisVersion != null &&
+                            otherVersion != null &&
+                            thisVersion.different(otherVersion)) {
+
+                        if (AdapterManager.ConcurrencyChecking.isCurrentlyEnabled()) {
+                            LOG.info("concurrency conflict detected on " + thisOid + " (" + otherVersion + ")");
+                            final String currentUser = authenticationSession.getUserName();
+                            final ConcurrencyException abortCause = new ConcurrencyException(currentUser, thisOid,
+                                    thisVersion, otherVersion);
+                            getCurrentTransaction().setAbortCause(abortCause);
+
+                        } else {
+                            LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion
+                                    + ")");
+                        }
+                    }
+                } else {
+                    originalOid = createPersistentOrViewModelOid(pojo);
+
+                    // it appears to be possible that there is already an adapter for this Oid,
+                    // ie from ObjectStore#resolveImmediately()
+                    adapter = getAdapterFor(originalOid);
+                    if (adapter != null) {
+                        remapRecreatedPojo(adapter, pojo);
+                    } else {
+                        adapter = mapRecreatedPojo(originalOid, pojo);
+                        CallbackFacet.Util.callCallback(adapter, LoadedCallbackFacet.class);
+                    }
+                }
+
+                adapter.setVersion(datastoreVersion);
+            }
+        }, calledFrom);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/be852c94/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
index ec41444..1b59683 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
@@ -36,7 +36,7 @@ public class PersistenceQueryFindAllInstancesProcessor extends PersistenceQueryP
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceQueryFindAllInstancesProcessor.class);
 
     public PersistenceQueryFindAllInstancesProcessor(final PersistenceManager persistenceManager, final FrameworkSynchronizer frameworkSynchronizer) {
-        super(persistenceManager, frameworkSynchronizer);
+        super(persistenceManager);
     }
 
     public List<ObjectAdapter> process(final PersistenceQueryFindAllInstances persistenceQuery) {

http://git-wip-us.apache.org/repos/asf/isis/blob/be852c94/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
index 1224afb..afd04a6 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
@@ -44,7 +44,7 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceQueryFindUsingApplibQueryProcessor.class);
 
     public PersistenceQueryFindUsingApplibQueryProcessor(final PersistenceManager persistenceManager, final FrameworkSynchronizer frameworkSynchronizer) {
-        super(persistenceManager, frameworkSynchronizer);
+        super(persistenceManager);
     }
 
     public List<ObjectAdapter> process(final PersistenceQueryFindUsingApplibQueryDefault persistenceQuery) {

http://git-wip-us.apache.org/repos/asf/isis/blob/be852c94/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
index 00f68fb..05db979 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
@@ -34,7 +34,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.FrameworkSynchronizer;
 import org.apache.isis.core.runtime.system.persistence.FrameworkSynchronizer.CalledFrom;
 import org.apache.isis.core.runtime.system.persistence.PersistenceQuery;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -44,11 +43,9 @@ public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQue
         implements PersistenceQueryProcessor<T> {
 
     private final PersistenceManager persistenceManager;
-    private final FrameworkSynchronizer frameworkSynchronizer;
 
-    protected PersistenceQueryProcessorAbstract(final PersistenceManager persistenceManager, final FrameworkSynchronizer frameworkSynchronizer) {
+    protected PersistenceQueryProcessorAbstract(final PersistenceManager persistenceManager) {
         this.persistenceManager = persistenceManager;
-        this.frameworkSynchronizer = frameworkSynchronizer;
     }
 
     protected PersistenceManager getPersistenceManager() {
@@ -82,7 +79,7 @@ public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQue
             ObjectAdapter adapter;
             if(pojo instanceof Persistable) {
                 // an entity
-                frameworkSynchronizer.postLoadProcessingFor((Persistable) pojo, CalledFrom.OS_QUERY);
+                getPersistenceSession().postLoadProcessingFor((Persistable) pojo, CalledFrom.OS_QUERY);
                 adapter = getAdapterManager().getAdapterFor(pojo);
             } else {
                 // a value type