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/11 00:09:07 UTC
[43/50] 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/master
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