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/14 08:37:03 UTC

[01/23] isis git commit: ISIS-1195: update to docs on running integration tests from within IntelliJ

Repository: isis
Updated Branches:
  refs/heads/ISIS-1194 02e41b3dd -> 3ca02b280


ISIS-1195: update to docs on running integration tests from within IntelliJ


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

Branch: refs/heads/ISIS-1194
Commit: a549b453edf747fd34fd55758b57f22d21f56c95
Parents: 02e41b3
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Sep 14 07:17:55 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:19:37 2015 +0100

----------------------------------------------------------------------
 .../src/main/asciidoc/guides/_cg_ide_intellij.adoc |  10 ++++++++++
 .../run-debug-configuration-single-module.png      | Bin 0 -> 44274 bytes
 2 files changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a549b453/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
index 308de01..f357820 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
@@ -384,6 +384,16 @@ One thing worth knowing; IntelliJ actively scans the filesystem all the time.  I
 
 
 
+== Running Integration Tests
+
+
+When running integration tests from within IntelliJ, make sure that the `search for tests` radio button is set to `In single module`:
+
+image::{_imagesdir}appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png[width="600px",link="{_imagesdir}appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png"]
+
+If this radio button is set to one of the other options then you may obtain class loading issues; these result from IntelliJ attempting to run unit tests of the `dom` project that depend on test classes in that module, but using the classpath of the `integtests` module whereby the `dom` test-classes (`test-jar` artifact) are not exposed on the Maven classpath.
+
+
 == Advanced
 
 In this section are a couple of options that will reduce the length of the change code/build/deploy/review feedback loop.

http://git-wip-us.apache.org/repos/asf/isis/blob/a549b453/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png b/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png
new file mode 100644
index 0000000..ca0bb13
Binary files /dev/null and b/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png differ


[15/23] isis git commit: ISIS-1194: simplifying AdapterManagerDefault#existingOrValueAdapter

Posted by da...@apache.org.
ISIS-1194: simplifying AdapterManagerDefault#existingOrValueAdapter


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

Branch: refs/heads/ISIS-1194
Commit: 04ff36a81525e94f0172b2c1906f053753ea3f42
Parents: f14743b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 19:02:06 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:12 2015 +0100

----------------------------------------------------------------------
 .../adaptermanager/AdapterManagerDefault.java        | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/04ff36a8/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index 330f600..bafb47d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -201,7 +201,10 @@ public class AdapterManagerDefault implements AdapterManager,
         }
         
         // pojo may have been lazily loaded by object store, but we haven't yet seen it
-        final ObjectAdapter lazilyLoadedAdapter = lazilyLoaded(pojo);
+        final ObjectAdapter lazilyLoadedAdapter =
+                pojo instanceof Persistable
+                        ? persistenceSession.mapPersistent((Persistable) pojo)
+                        : null;
         if(lazilyLoadedAdapter != null) {
             return lazilyLoadedAdapter;
         }
@@ -218,16 +221,6 @@ public class AdapterManagerDefault implements AdapterManager,
         return null;
     }
 
-    private ObjectAdapter lazilyLoaded(Object pojo) {
-        if(!(pojo instanceof Persistable)) {
-            return null;
-        }
-        final Persistable persistenceCapable = (Persistable) pojo;
-        return persistenceSession.mapPersistent(persistenceCapable);
-    }
-
-
-
     /**
      * {@inheritDoc}
      */


[07/23] isis git commit: ISIS-1194: removing redundant Runnables in the PersistenceSession methods (previous logged)

Posted by da...@apache.org.
ISIS-1194: removing redundant Runnables in the PersistenceSession methods (previous logged)


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

Branch: refs/heads/ISIS-1194
Commit: bf10d6f87aeb27809a2c3379a6e065bda81a7dfe
Parents: 61ebb2f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:32:11 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:53 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java  | 338 +++++++------------
 1 file changed, 131 insertions(+), 207 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/bf10d6f8/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 b18470d..d6e3c23 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
@@ -23,7 +23,6 @@ import java.lang.reflect.Modifier;
 import java.text.MessageFormat;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Callable;
 
 import javax.jdo.FetchGroup;
 import javax.jdo.FetchPlan;
@@ -1239,105 +1238,86 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     //region > FrameworkSynchronizer delegate methods
 
     public void postDeleteProcessingFor(final Persistable pojo) {
-        new Runnable() {
-            @Override
-            public void run() {
-                ObjectAdapter adapter = getAdapterFor(pojo);
-                if (adapter == null) {
-                    return;
-                }
-
-                // previously we called the removed callback (if any).
-                // however, this is almost certainly incorrect, because DN will not allow us
-                // to "touch" the pojo once deleted.
-                //
-                // CallbackFacet.Util.callCallback(adapter, RemovedCallbackFacet.class);
-
-            }
-        }.run();
+        ObjectAdapter adapter = getAdapterFor(pojo);
+        if (adapter == null) {
+            return;
+        }
 
+        // previously we called the removed callback (if any).
+        // however, this is almost certainly incorrect, because DN will not allow us
+        // to "touch" the pojo once deleted.
+        //
+        // CallbackFacet.Util.callCallback(adapter, RemovedCallbackFacet.class);
     }
 
 
     public void preDeleteProcessingFor(final Persistable pojo) {
-        new Runnable() {
-            @Override
-            public void run() {
-                ObjectAdapter adapter = adapterFor(pojo);
-
-                final IsisTransaction transaction = getCurrentTransaction();
-                transaction.enlistDeleting(adapter);
+        ObjectAdapter adapter = adapterFor(pojo);
 
-                CallbackFacet.Util.callCallback(adapter, RemovingCallbackFacet.class);
-            }
-        }.run();
+        final IsisTransaction transaction = getCurrentTransaction();
+        transaction.enlistDeleting(adapter);
 
+        CallbackFacet.Util.callCallback(adapter, RemovingCallbackFacet.class);
     }
 
 
     public void postLoadProcessingFor(final Persistable pojo) {
+        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);
 
-        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);
-                    }
+                    LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion
+                            + ")");
                 }
-
-                adapter.setVersion(datastoreVersion);
             }
-        }.run();
+        } 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);
     }
 
     /**
@@ -1349,30 +1329,24 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * to determine which callback to fire.
      */
     public void preStoreProcessingFor(final Persistable pojo) {
-        new Runnable() {
-            @Override
-            public void run() {
-                final ObjectAdapter adapter = getAdapterFor(pojo);
-                if (adapter == null) {
-                    // not expected.
-                    return;
-                }
-
-                final RootOid isisOid = (RootOid) adapter.getOid();
-                if (isisOid.isTransient()) {
-                    // persisting
-                    // previously this was performed in the DataNucleusSimplePersistAlgorithm.
-                    CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
-                } else {
-                    // updating
+        final ObjectAdapter adapter = getAdapterFor(pojo);
+        if (adapter == null) {
+            // not expected.
+            return;
+        }
 
-                    // don't call here, already called in preDirty.
+        final RootOid isisOid = (RootOid) adapter.getOid();
+        if (isisOid.isTransient()) {
+            // persisting
+            // previously this was performed in the DataNucleusSimplePersistAlgorithm.
+            CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
+        } else {
+            // updating
 
-                    // CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
-                }
+            // don't call here, already called in preDirty.
 
-            }
-        }.run();
+            // CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
+        }
     }
 
     /**
@@ -1384,41 +1358,36 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * to determine which callback to fire.
      */
     public void postStoreProcessingFor(final Persistable pojo) {
-        new Runnable() {
-            @Override
-            public void run() {
-                ensureRootObject(pojo);
+        ensureRootObject(pojo);
 
-                // assert is persistent
-                if (!pojo.dnIsPersistent()) {
-                    throw new IllegalStateException(
-                            "Pojo JDO state is not persistent! pojo dnOid: " + JDOHelper.getObjectId(pojo));
-                }
+        // assert is persistent
+        if (!pojo.dnIsPersistent()) {
+            throw new IllegalStateException(
+                    "Pojo JDO state is not persistent! pojo dnOid: " + JDOHelper.getObjectId(pojo));
+        }
 
-                final ObjectAdapter adapter = getAdapterFor(pojo);
-                final RootOid isisOid = (RootOid) adapter.getOid();
+        final ObjectAdapter adapter = getAdapterFor(pojo);
+        final RootOid isisOid = (RootOid) adapter.getOid();
 
-                if (isisOid.isTransient()) {
-                    // persisting
-                    final RootOid persistentOid = createPersistentOrViewModelOid(pojo);
+        if (isisOid.isTransient()) {
+            // persisting
+            final RootOid persistentOid = createPersistentOrViewModelOid(pojo);
 
-                    remapAsPersistent(adapter, persistentOid);
+            remapAsPersistent(adapter, persistentOid);
 
-                    CallbackFacet.Util.callCallback(adapter, PersistedCallbackFacet.class);
+            CallbackFacet.Util.callCallback(adapter, PersistedCallbackFacet.class);
 
-                    final IsisTransaction transaction = getCurrentTransaction();
-                    transaction.enlistCreated(adapter);
-                } else {
-                    // updating;
-                    // the callback and transaction.enlist are done in the preDirty callback
-                    // (can't be done here, as the enlist requires to capture the 'before' values)
-                    CallbackFacet.Util.callCallback(adapter, UpdatedCallbackFacet.class);
-                }
+            final IsisTransaction transaction = getCurrentTransaction();
+            transaction.enlistCreated(adapter);
+        } else {
+            // updating;
+            // the callback and transaction.enlist are done in the preDirty callback
+            // (can't be done here, as the enlist requires to capture the 'before' values)
+            CallbackFacet.Util.callCallback(adapter, UpdatedCallbackFacet.class);
+        }
 
-                Version versionIfAny = getVersionIfAny(pojo);
-                adapter.setVersion(versionIfAny);
-            }
-        }.run();
+        Version versionIfAny = getVersionIfAny(pojo);
+        adapter.setVersion(versionIfAny);
     }
 
     private Version getVersionIfAny(final Persistable pojo) {
@@ -1427,64 +1396,38 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
 
     public void preDirtyProcessingFor(final Persistable pojo) {
-        new Runnable() {
-            @Override
-            public void run() {
-                ObjectAdapter adapter = getAdapterFor(pojo);
-                if (adapter == null) {
-                    // seen this happen in the case when a parent entity (LeaseItem) has a collection of children
-                    // objects (LeaseTerm) for which we haven't had a loaded callback fired and so are not yet
-                    // mapped.
-
-                    // it seems reasonable in this case to simply map into Isis here ("just-in-time"); presumably
-                    // DN would not be calling this callback if the pojo was not persistent.
-
-                    adapter = lazilyLoaded(pojo);
-                    if (adapter == null) {
-                        throw new RuntimeException(
-                                "DN could not find objectId for pojo (unexpected) and so could not map into Isis; pojo=["
-                                        + pojo + "]");
-                    }
-                }
-                if (adapter.isTransient()) {
-                    // seen this happen in the case when there's a 1<->m bidirectional collection, and we're
-                    // attaching the child object, which is being persisted by DN as a result of persistence-by-reachability,
-                    // and it "helpfully" sets up the parent attribute on the child, causing this callback to fire.
-                    //
-                    // however, at the same time, Isis has only queued up a CreateObjectCommand for the transient object, but it
-                    // hasn't yet executed, so thinks that the adapter is still transient.
-                    return;
-                }
-
-                CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
-
-                final IsisTransaction transaction = getCurrentTransaction();
-                transaction.enlistUpdating(adapter);
-
-                ensureRootObject(pojo);
+        ObjectAdapter adapter = getAdapterFor(pojo);
+        if (adapter == null) {
+            // seen this happen in the case when a parent entity (LeaseItem) has a collection of children
+            // objects (LeaseTerm) for which we haven't had a loaded callback fired and so are not yet
+            // mapped.
+
+            // it seems reasonable in this case to simply map into Isis here ("just-in-time"); presumably
+            // DN would not be calling this callback if the pojo was not persistent.
+
+            adapter = lazilyLoaded(pojo);
+            if (adapter == null) {
+                throw new RuntimeException(
+                        "DN could not find objectId for pojo (unexpected) and so could not map into Isis; pojo=["
+                                + pojo + "]");
             }
-        }.run();
-    }
-
-    private <T> T withLogging(Persistable pojo, Callable<T> runnable) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug(logString(LoggingLocation.ENTRY, pojo));
         }
-        try {
-            return runnable.call();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug(logString(LoggingLocation.EXIT, pojo));
-            }
+        if (adapter.isTransient()) {
+            // seen this happen in the case when there's a 1<->m bidirectional collection, and we're
+            // attaching the child object, which is being persisted by DN as a result of persistence-by-reachability,
+            // and it "helpfully" sets up the parent attribute on the child, causing this callback to fire.
+            //
+            // however, at the same time, Isis has only queued up a CreateObjectCommand for the transient object, but it
+            // hasn't yet executed, so thinks that the adapter is still transient.
+            return;
         }
-    }
 
-    private String logString(LoggingLocation location, Persistable pojo) {
-        final ObjectAdapter adapter = getAdapterFor(pojo);
-        // initial spaces just to look better in log when wrapped by IsisLifecycleListener...
-        return location.prefix + " oid=" + (adapter !=null? adapter.getOid(): "(null)") + " ,pojo " + pojo;
+        CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
+
+        final IsisTransaction transaction = getCurrentTransaction();
+        transaction.enlistUpdating(adapter);
+
+        ensureRootObject(pojo);
     }
 
     /**
@@ -1498,25 +1441,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         }
     }
 
-    /**
-     * Categorises where called from.
-     *
-     * <p>
-     * Just used for logging.
-     */
-    public enum CalledFrom {
-        EVENT_LOAD,
-        EVENT_PRESTORE,
-        EVENT_POSTSTORE,
-        EVENT_PREDIRTY,
-        EVENT_POSTDIRTY,
-        OS_QUERY,
-        OS_RESOLVE,
-        OS_LAZILYLOADED,
-        EVENT_PREDELETE,
-        EVENT_POSTDELETE
-    }
-
     //endregion
 
 }


[08/23] isis git commit: ISIS-1194: moved PersistenceSession#lazilyLoaded to AdapterManager.

Posted by da...@apache.org.
ISIS-1194: moved PersistenceSession#lazilyLoaded to AdapterManager.

Also:
- renamed some of the methods in PersistenceSession to reflect what they actually do (vs when they are called).
- inlined postDeleteProcessing into its caller (IsisLifecycleListener2) since is a no-op


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

Branch: refs/heads/ISIS-1194
Commit: f401ee6f7a58d1d7fceea5731dee476f09e69790
Parents: bf10d6f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:42:58 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:55 2015 +0100

----------------------------------------------------------------------
 .../adaptermanager/AdapterManagerDefault.java   | 12 +++++-
 .../persistence/IsisLifecycleListener2.java     | 20 ++++-----
 .../system/persistence/PersistenceSession.java  | 44 ++++++--------------
 .../PersistenceQueryProcessorAbstract.java      |  2 +-
 4 files changed, 34 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f401ee6f/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index 89c00bc..085260b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.runtime.persistence.adaptermanager;
 
+import org.datanucleus.enhancement.Persistable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -200,7 +201,7 @@ public class AdapterManagerDefault implements AdapterManager,
         }
         
         // pojo may have been lazily loaded by object store, but we haven't yet seen it
-        final ObjectAdapter lazilyLoadedAdapter = persistenceSession.lazilyLoaded(pojo);
+        final ObjectAdapter lazilyLoadedAdapter = lazilyLoaded(pojo);
         if(lazilyLoadedAdapter != null) {
             return lazilyLoadedAdapter;
         }
@@ -217,6 +218,15 @@ public class AdapterManagerDefault implements AdapterManager,
         return null;
     }
 
+    private ObjectAdapter lazilyLoaded(Object pojo) {
+        if(!(pojo instanceof Persistable)) {
+            return null;
+        }
+        final Persistable persistenceCapable = (Persistable) pojo;
+        return persistenceSession.mapRecreatedPersistent(persistenceCapable);
+    }
+
+
 
     /**
      * {@inheritDoc}

http://git-wip-us.apache.org/repos/asf/isis/blob/f401ee6f/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 09cb735..54c38c8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -75,7 +75,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.postLoadProcessingFor(pojo);
+                persistenceSession.initializeMapAndCheckConcurrency(pojo);
             }});
     }
 
@@ -85,7 +85,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.preStoreProcessingFor(pojo);
+                persistenceSession.callIsisPersistingCallback(pojo);
 
             }});
     }
@@ -128,20 +128,20 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.preDeleteProcessingFor(pojo);
+                persistenceSession.invokeIsisRemovingCallback(pojo);
             }
         });
     }
 
     @Override
     public void postDelete(InstanceLifecycleEvent event) {
-        withLogging(Phase.POST, event, new RunnableAbstract(event){
-            @Override
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.postDeleteProcessingFor(pojo);
-            }
-        });
+
+        // previously we called the PersistenceSession to invoke the removed callback (if any).
+        // however, this is almost certainly incorrect, because DN will not allow us
+        // to "touch" the pojo once deleted.
+        //
+        // CallbackFacet.Util.callCallback(adapter, RemovedCallbackFacet.class);
+
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/f401ee6f/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 d6e3c23..8af6887 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
@@ -753,15 +753,8 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //region > lazilyLoaded
 
-    public ObjectAdapter lazilyLoaded(Object pojo) {
-        if(!(pojo instanceof Persistable)) {
-            return null;
-        }
-        final Persistable persistenceCapable = (Persistable) pojo;
-        return lazilyLoaded(persistenceCapable);
-    }
 
-    private ObjectAdapter lazilyLoaded(final Persistable pojo) {
+    public ObjectAdapter mapRecreatedPersistent(final Persistable pojo) {
         if (getJdoObjectId(pojo) == null) {
             return null;
         }
@@ -824,7 +817,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).
-        postLoadProcessingFor((Persistable) domainObject);
+        initializeMapAndCheckConcurrency((Persistable) domainObject);
     }
     //endregion
 
@@ -1237,21 +1230,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //region > FrameworkSynchronizer delegate methods
 
-    public void postDeleteProcessingFor(final Persistable pojo) {
-        ObjectAdapter adapter = getAdapterFor(pojo);
-        if (adapter == null) {
-            return;
-        }
-
-        // previously we called the removed callback (if any).
-        // however, this is almost certainly incorrect, because DN will not allow us
-        // to "touch" the pojo once deleted.
-        //
-        // CallbackFacet.Util.callCallback(adapter, RemovedCallbackFacet.class);
-    }
-
-
-    public void preDeleteProcessingFor(final Persistable pojo) {
+    public void invokeIsisRemovingCallback(final Persistable pojo) {
         ObjectAdapter adapter = adapterFor(pojo);
 
         final IsisTransaction transaction = getCurrentTransaction();
@@ -1261,7 +1240,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
 
 
-    public void postLoadProcessingFor(final Persistable pojo) {
+    public void initializeMapAndCheckConcurrency(final Persistable pojo) {
         final Persistable pc = pojo;
 
         // need to do eagerly, because (if a viewModel then) a
@@ -1287,7 +1266,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             final Version thisVersion = originalVersion;
             final Version otherVersion = datastoreVersion;
 
-            if (thisVersion != null &&
+            if (    thisVersion != null &&
                     otherVersion != null &&
                     thisVersion.different(otherVersion)) {
 
@@ -1328,7 +1307,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
      * to determine which callback to fire.
      */
-    public void preStoreProcessingFor(final Persistable pojo) {
+    public void callIsisPersistingCallback(final Persistable pojo) {
         final ObjectAdapter adapter = getAdapterFor(pojo);
         if (adapter == null) {
             // not expected.
@@ -1390,10 +1369,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         adapter.setVersion(versionIfAny);
     }
 
-    private Version getVersionIfAny(final Persistable pojo) {
-        return Utils.getVersionIfAny(pojo, authenticationSession);
-    }
-
 
     public void preDirtyProcessingFor(final Persistable pojo) {
         ObjectAdapter adapter = getAdapterFor(pojo);
@@ -1405,7 +1380,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             // it seems reasonable in this case to simply map into Isis here ("just-in-time"); presumably
             // DN would not be calling this callback if the pojo was not persistent.
 
-            adapter = lazilyLoaded(pojo);
+            adapter = mapRecreatedPersistent(pojo);
             if (adapter == null) {
                 throw new RuntimeException(
                         "DN could not find objectId for pojo (unexpected) and so could not map into Isis; pojo=["
@@ -1441,6 +1416,11 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         }
     }
 
+    private Version getVersionIfAny(final Persistable pojo) {
+        return Utils.getVersionIfAny(pojo, authenticationSession);
+    }
+
+
     //endregion
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/f401ee6f/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 16b0c60..434acc5 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
@@ -59,7 +59,7 @@ public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQue
             ObjectAdapter adapter;
             if(pojo instanceof Persistable) {
                 // an entity
-                persistenceSession.postLoadProcessingFor((Persistable) pojo);
+                persistenceSession.initializeMapAndCheckConcurrency((Persistable) pojo);
                 adapter = persistenceSession.getAdapterFor(pojo);
             } else {
                 // a value type


[09/23] isis git commit: ISIS-1194: simplifying PersistenceSession

Posted by da...@apache.org.
ISIS-1194: simplifying PersistenceSession

renaming
- #mapRecreatedPersistent to #mapPersistent
- inline createPersistentOrViewModelOid
- inline getJdoObjectId


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

Branch: refs/heads/ISIS-1194
Commit: e8456b71b5e290a8b21e8e98b2d2e76ada3310b5
Parents: f401ee6
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:51:12 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:57 2015 +0100

----------------------------------------------------------------------
 .../adaptermanager/AdapterManagerDefault.java   |  2 +-
 .../persistence/IsisLifecycleListener2.java     |  2 +-
 .../system/persistence/PersistenceSession.java  | 25 ++++++--------------
 3 files changed, 9 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e8456b71/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index 085260b..330f600 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -223,7 +223,7 @@ public class AdapterManagerDefault implements AdapterManager,
             return null;
         }
         final Persistable persistenceCapable = (Persistable) pojo;
-        return persistenceSession.mapRecreatedPersistent(persistenceCapable);
+        return persistenceSession.mapPersistent(persistenceCapable);
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e8456b71/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 54c38c8..1657fcd 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -85,7 +85,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.callIsisPersistingCallback(pojo);
+                persistenceSession.invokeIsisPersistingCallback(pojo);
 
             }});
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/e8456b71/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 8af6887..c396055 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
@@ -754,11 +754,11 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     //region > lazilyLoaded
 
 
-    public ObjectAdapter mapRecreatedPersistent(final Persistable pojo) {
-        if (getJdoObjectId(pojo) == null) {
+    public ObjectAdapter mapPersistent(final Persistable pojo) {
+        if (persistenceManager.getObjectId(pojo) == null) {
             return null;
         }
-        final RootOid oid = createPersistentOrViewModelOid(pojo);
+        final RootOid oid = oidGenerator.createPersistentOrViewModelOid(pojo);
         final ObjectAdapter adapter = mapRecreatedPojo(oid, pojo);
         return adapter;
     }
@@ -1164,19 +1164,8 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //endregion
 
-    //region > oidGenerator delegate methods
-
-    public final RootOid createPersistentOrViewModelOid(Object pojo) {
-        return oidGenerator.createPersistentOrViewModelOid(pojo);
-    }
-    //endregion
 
     //region > jdoPersistenceManager delegate methods
-
-    public Object getJdoObjectId(Object pojo) {
-        return persistenceManager.getObjectId(pojo);
-    }
-
     public javax.jdo.Query newJdoQuery(Class<?> cls) {
         return persistenceManager.newQuery(cls);
     }
@@ -1283,7 +1272,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 }
             }
         } else {
-            originalOid = createPersistentOrViewModelOid(pojo);
+            originalOid = oidGenerator.createPersistentOrViewModelOid(pojo);
 
             // it appears to be possible that there is already an adapter for this Oid,
             // ie from ObjectStore#resolveImmediately()
@@ -1307,7 +1296,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
      * to determine which callback to fire.
      */
-    public void callIsisPersistingCallback(final Persistable pojo) {
+    public void invokeIsisPersistingCallback(final Persistable pojo) {
         final ObjectAdapter adapter = getAdapterFor(pojo);
         if (adapter == null) {
             // not expected.
@@ -1350,7 +1339,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
         if (isisOid.isTransient()) {
             // persisting
-            final RootOid persistentOid = createPersistentOrViewModelOid(pojo);
+            final RootOid persistentOid = oidGenerator.createPersistentOrViewModelOid(pojo);
 
             remapAsPersistent(adapter, persistentOid);
 
@@ -1380,7 +1369,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             // it seems reasonable in this case to simply map into Isis here ("just-in-time"); presumably
             // DN would not be calling this callback if the pojo was not persistent.
 
-            adapter = mapRecreatedPersistent(pojo);
+            adapter = mapPersistent(pojo);
             if (adapter == null) {
                 throw new RuntimeException(
                         "DN could not find objectId for pojo (unexpected) and so could not map into Isis; pojo=["


[14/23] isis git commit: ISIS-1194: renamed method in PersistenceSession

Posted by da...@apache.org.
ISIS-1194: renamed method in PersistenceSession


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

Branch: refs/heads/ISIS-1194
Commit: f14743b2eb7ce3e831fac1fc2f76465aad68bab5
Parents: 38c46aa
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:58:23 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:09 2015 +0100

----------------------------------------------------------------------
 .../core/runtime/system/persistence/IsisLifecycleListener2.java   | 2 +-
 .../isis/core/runtime/system/persistence/PersistenceSession.java  | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f14743b2/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index c9a2d76..4e400bc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -108,7 +108,7 @@ public class IsisLifecycleListener2
     @Override
     public void preDelete(InstanceLifecycleEvent event) {
         final Persistable pojo = Utils.persistenceCapableFor(event);
-        persistenceSession.invokeIsisRemovingCallback(pojo);
+        persistenceSession.enlistDeletingAndInvokeIsisRemovingCallbackFacet(pojo);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/f14743b2/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 c396055..0281482 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
@@ -1219,7 +1219,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //region > FrameworkSynchronizer delegate methods
 
-    public void invokeIsisRemovingCallback(final Persistable pojo) {
+    public void enlistDeletingAndInvokeIsisRemovingCallbackFacet(final Persistable pojo) {
         ObjectAdapter adapter = adapterFor(pojo);
 
         final IsisTransaction transaction = getCurrentTransaction();
@@ -1228,7 +1228,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         CallbackFacet.Util.callCallback(adapter, RemovingCallbackFacet.class);
     }
 
-
     public void initializeMapAndCheckConcurrency(final Persistable pojo) {
         final Persistable pc = pojo;
 


[18/23] isis git commit: ISIS-1194: PersistenceSession now implements QuerySubmitter API (cf it implementing AdapterManager)

Posted by da...@apache.org.
ISIS-1194: PersistenceSession now implements QuerySubmitter API (cf it implementing AdapterManager)


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

Branch: refs/heads/ISIS-1194
Commit: 0c3f2f7af2e7135f3a1ae175df2993ffcc68f03b
Parents: fa309dc
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Sep 12 08:57:16 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:19 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java  | 32 +++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0c3f2f7a/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 6405ee2..e3f2c33 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
@@ -48,6 +48,8 @@ import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -56,6 +58,7 @@ 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.collections.modify.CollectionFacetUtils;
 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;
@@ -108,7 +111,8 @@ import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 
-public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager {
+public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager,
+        QuerySubmitter {
 
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
 
@@ -337,12 +341,38 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         setState(State.CLOSED);
     }
 
+    //endregion
+
+    //region > Injectable
+    //endregion
+
     @Override
     public void injectInto(final Object candidate) {
         if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
             final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
             cast.setAdapterManager(this);
         }
+        if (QuerySubmitterAware.class.isAssignableFrom(candidate.getClass())) {
+            final QuerySubmitterAware cast = QuerySubmitterAware.class.cast(candidate);
+            cast.setQuerySubmitter(this);
+        }
+    }
+
+    //region > QuerySubmitter impl
+
+    @Override
+    public <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query) {
+        final ObjectAdapter instances = findInstancesInTransaction(query,
+                QueryCardinality.MULTIPLE);
+        return CollectionFacetUtils.convertToAdapterList(instances);
+    }
+
+    @Override
+    public <T> ObjectAdapter firstMatchingQuery(final Query<T> query) {
+        final ObjectAdapter instances = findInstancesInTransaction(query,
+                QueryCardinality.SINGLE);
+        final List<ObjectAdapter> list = CollectionFacetUtils.convertToAdapterList(instances);
+        return list.size() > 0 ? list.get(0) : null;
     }
 
     //endregion


[12/23] isis git commit: ISIS-1194: inlining runnable impl's in IsisLifecycleListener2

Posted by da...@apache.org.
ISIS-1194: inlining runnable impl's in IsisLifecycleListener2


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

Branch: refs/heads/ISIS-1194
Commit: e0363f69a0c35dff8ee3956ba68294302a3154de
Parents: 6243d52
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:53:36 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:05 2015 +0100

----------------------------------------------------------------------
 .../persistence/IsisLifecycleListener2.java     | 60 ++++++++++++--------
 1 file changed, 36 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e0363f69/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 68a966a..73cbd0d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -56,17 +56,32 @@ public class IsisLifecycleListener2
 
     @Override
     public void postCreate(final InstanceLifecycleEvent event) {
-        new RunnableNoop(event).run();
+        final InstanceLifecycleEvent event1 = event;
+        new RunnableAbstract(event1) {
+            protected void doRun() {}
+        }.run();
     }
 
     @Override
     public void preAttach(final InstanceLifecycleEvent event) {
-        new RunnableEnsureRootObject(event).run();
+        final InstanceLifecycleEvent event1 = event;
+        new RunnableAbstract(event1) {
+            protected void doRun() {
+                final Persistable pojo = Utils.persistenceCapableFor(event);
+                persistenceSession.ensureRootObject(pojo);
+            }
+        }.run();
     }
 
     @Override
     public void postAttach(final InstanceLifecycleEvent event) {
-        new RunnableEnsureRootObject(event).run();
+        final InstanceLifecycleEvent event1 = event;
+        new RunnableAbstract(event1) {
+            protected void doRun() {
+                final Persistable pojo = Utils.persistenceCapableFor(event);
+                persistenceSession.ensureRootObject(pojo);
+            }
+        }.run();
     }
 
     @Override
@@ -118,7 +133,10 @@ public class IsisLifecycleListener2
         //
         // 1<->m bidirectional, persistence-by-reachability
 
-        new RunnableNoop(event).run();
+        final InstanceLifecycleEvent event1 = event;
+        new RunnableAbstract(event1) {
+            protected void doRun() {}
+        }.run();
     }
 
     @Override
@@ -162,12 +180,24 @@ public class IsisLifecycleListener2
 
     @Override
     public void preDetach(InstanceLifecycleEvent event) {
-        new RunnableEnsureRootObject(event).run();
+        final InstanceLifecycleEvent event1 = event;
+        new RunnableAbstract(event1) {
+            protected void doRun() {
+                final Persistable pojo = Utils.persistenceCapableFor(event);
+                persistenceSession.ensureRootObject(pojo);
+            }
+        }.run();
     }
 
     @Override
     public void postDetach(InstanceLifecycleEvent event) {
-        new RunnableEnsureRootObject(event).run();
+        final InstanceLifecycleEvent event1 = event;
+        new RunnableAbstract(event1) {
+            protected void doRun() {
+                final Persistable pojo = Utils.persistenceCapableFor(event);
+                persistenceSession.ensureRootObject(pojo);
+            }
+        }.run();
     }
 
     
@@ -193,24 +223,6 @@ public class IsisLifecycleListener2
         
         protected abstract void doRun(); 
     }
-    
-    private class RunnableNoop extends RunnableAbstract {
-        RunnableNoop(InstanceLifecycleEvent event) {
-            super(event);
-        }
-        protected void doRun() {} 
-    }
-    
-    private class RunnableEnsureRootObject extends RunnableAbstract {
-        RunnableEnsureRootObject(InstanceLifecycleEvent event) {
-            super(event);
-        }
-        protected void doRun() {
-            final Persistable pojo = Utils.persistenceCapableFor(event);
-            persistenceSession.ensureRootObject(pojo);
-        }
-    }
-    
 
     // /////////////////////////////////////////////////////////
     // SuspendListener


[19/23] isis git commit: ISIS-1194: PersistenceSession implements ObjectPersistor API (cf it implementing AdapterManager, QuerySubmitter)

Posted by da...@apache.org.
ISIS-1194: PersistenceSession implements ObjectPersistor API (cf it implementing AdapterManager, QuerySubmitter)


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

Branch: refs/heads/ISIS-1194
Commit: 2784cc1ce3891b644ca2d2fafa839fa965cc0577
Parents: 0c3f2f7
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Sep 12 09:04:48 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:21 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java  | 31 +++++++++++++++-----
 1 file changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/2784cc1c/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 e3f2c33..87b3016 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
@@ -48,6 +48,8 @@ import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
 import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -112,7 +114,7 @@ import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 
 public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager,
-        QuerySubmitter {
+        QuerySubmitter, ObjectPersistor {
 
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
 
@@ -356,21 +358,23 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             final QuerySubmitterAware cast = QuerySubmitterAware.class.cast(candidate);
             cast.setQuerySubmitter(this);
         }
+        if (ObjectPersistorAware.class.isAssignableFrom(candidate.getClass())) {
+            final ObjectPersistorAware cast = ObjectPersistorAware.class.cast(candidate);
+            cast.setObjectPersistor(this);
+        }
     }
 
     //region > QuerySubmitter impl
 
     @Override
     public <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query) {
-        final ObjectAdapter instances = findInstancesInTransaction(query,
-                QueryCardinality.MULTIPLE);
+        final ObjectAdapter instances = findInstancesInTransaction(query, QueryCardinality.MULTIPLE);
         return CollectionFacetUtils.convertToAdapterList(instances);
     }
 
     @Override
     public <T> ObjectAdapter firstMatchingQuery(final Query<T> query) {
-        final ObjectAdapter instances = findInstancesInTransaction(query,
-                QueryCardinality.SINGLE);
+        final ObjectAdapter instances = findInstancesInTransaction(query, QueryCardinality.SINGLE);
         final List<ObjectAdapter> list = CollectionFacetUtils.convertToAdapterList(instances);
         return list.size() > 0 ? list.get(0) : null;
     }
@@ -894,7 +898,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
             @Override
             public void execute() {
-                makePersistent(adapter);
+                makePersistentTransactionAssumed(adapter);
 
                 // clear out the map of transient -> persistent
                 PersistenceSession.this.persistentByTransient.clear();
@@ -903,7 +907,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         });
     }
 
-    private void makePersistent(final ObjectAdapter adapter) {
+    private void makePersistentTransactionAssumed(final ObjectAdapter adapter) {
         if (alreadyPersistedOrNotPersistable(adapter)) {
             return;
         }
@@ -936,6 +940,19 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //endregion
 
+    //region > ObjectPersistor impl
+    @Override
+    public void makePersistent(final ObjectAdapter adapter) {
+        makePersistentInTransaction(adapter);
+    }
+
+    @Override
+    public void remove(final ObjectAdapter adapter) {
+        destroyObjectInTransaction(adapter);
+    }
+    //endregion
+
+
     //region > destroyObjectInTransaction
 
     /**


[13/23] isis git commit: ISIS-1194: inlining runnable impls in IsisLifecycleListener2

Posted by da...@apache.org.
ISIS-1194: inlining runnable impls in IsisLifecycleListener2


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

Branch: refs/heads/ISIS-1194
Commit: 38c46aa9c0304c7446f8ac8f7f4ae5b41f5e4df8
Parents: e0363f6
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:56:01 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:07 2015 +0100

----------------------------------------------------------------------
 .../persistence/IsisLifecycleListener2.java     | 115 ++++---------------
 1 file changed, 20 insertions(+), 95 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/38c46aa9/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 73cbd0d..c9a2d76 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -35,7 +35,6 @@ import com.google.common.collect.Maps;
 import org.datanucleus.enhancement.Persistable;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.IsisLifecycleListener;
 
 public class IsisLifecycleListener2
         implements AttachLifecycleListener, ClearLifecycleListener, CreateLifecycleListener, DeleteLifecycleListener,
@@ -56,73 +55,43 @@ public class IsisLifecycleListener2
 
     @Override
     public void postCreate(final InstanceLifecycleEvent event) {
-        final InstanceLifecycleEvent event1 = event;
-        new RunnableAbstract(event1) {
-            protected void doRun() {}
-        }.run();
+        // no-op
     }
 
     @Override
     public void preAttach(final InstanceLifecycleEvent event) {
-        final InstanceLifecycleEvent event1 = event;
-        new RunnableAbstract(event1) {
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.ensureRootObject(pojo);
-            }
-        }.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.ensureRootObject(pojo);
     }
 
     @Override
     public void postAttach(final InstanceLifecycleEvent event) {
-        final InstanceLifecycleEvent event1 = event;
-        new RunnableAbstract(event1) {
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.ensureRootObject(pojo);
-            }
-        }.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.ensureRootObject(pojo);
     }
 
     @Override
     public void postLoad(final InstanceLifecycleEvent event) {
-        new RunnableAbstract(event){
-            @Override
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.initializeMapAndCheckConcurrency(pojo);
-            }}.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.initializeMapAndCheckConcurrency(pojo);
     }
 
 	@Override
     public void preStore(InstanceLifecycleEvent event) {
-        new RunnableAbstract(event){
-            @Override
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.invokeIsisPersistingCallback(pojo);
-
-            }}.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.invokeIsisPersistingCallback(pojo);
     }
 
     @Override
     public void postStore(InstanceLifecycleEvent event) {
-        new RunnableAbstract(event){
-            @Override
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.postStoreProcessingFor(pojo);
-            }}.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.postStoreProcessingFor(pojo);
     }
 
     @Override
     public void preDirty(InstanceLifecycleEvent event) {
-        new RunnableAbstract(event){
-            @Override
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.preDirtyProcessingFor(pojo);
-            }}.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.preDirtyProcessingFor(pojo);
     }
 
     @Override
@@ -133,22 +102,13 @@ public class IsisLifecycleListener2
         //
         // 1<->m bidirectional, persistence-by-reachability
 
-        final InstanceLifecycleEvent event1 = event;
-        new RunnableAbstract(event1) {
-            protected void doRun() {}
-        }.run();
+        // no-op
     }
 
     @Override
     public void preDelete(InstanceLifecycleEvent event) {
-
-        new RunnableAbstract(event){
-            @Override
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.invokeIsisRemovingCallback(pojo);
-            }
-        }.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.invokeIsisRemovingCallback(pojo);
     }
 
     @Override
@@ -180,57 +140,23 @@ public class IsisLifecycleListener2
 
     @Override
     public void preDetach(InstanceLifecycleEvent event) {
-        final InstanceLifecycleEvent event1 = event;
-        new RunnableAbstract(event1) {
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.ensureRootObject(pojo);
-            }
-        }.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.ensureRootObject(pojo);
     }
 
     @Override
     public void postDetach(InstanceLifecycleEvent event) {
-        final InstanceLifecycleEvent event1 = event;
-        new RunnableAbstract(event1) {
-            protected void doRun() {
-                final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.ensureRootObject(pojo);
-            }
-        }.run();
+        final Persistable pojo = Utils.persistenceCapableFor(event);
+        persistenceSession.ensureRootObject(pojo);
     }
 
     
-    /////////////////////////////////////////////////////////////////////////
-    // withLogging
-    /////////////////////////////////////////////////////////////////////////
-
-    private abstract class RunnableAbstract implements Runnable {
-        final InstanceLifecycleEvent event;
-        public RunnableAbstract(final InstanceLifecycleEvent event) {
-            this.event = event;
-        }
-        @Override
-        public void run() {
-            if (isSuspended()) {
-                if (IsisLifecycleListener.LOG.isDebugEnabled()) {
-                    IsisLifecycleListener.LOG.debug(" [currently suspended - ignoring]");
-                }
-                return;
-            }
-            doRun();
-        }
-        
-        protected abstract void doRun(); 
-    }
-
     // /////////////////////////////////////////////////////////
     // SuspendListener
     // /////////////////////////////////////////////////////////
 
     private boolean suspended;
 
-
     @Override
     public boolean isSuspended() {
         return suspended;
@@ -269,5 +195,4 @@ public class IsisLifecycleListener2
         return phase + " " + location.prefix + " " + LifecycleEventType.lookup(event.getEventType()) + ": oid=" + (adapter !=null? adapter.getOid(): "(null)") + " ,pojo " + pojo;
     }
 
-    
 }


[20/23] isis git commit: ISIS-1194: PersistenceSession now implements DomainObjectServices AP (cf previous commits)

Posted by da...@apache.org.
ISIS-1194: PersistenceSession now implements DomainObjectServices AP (cf previous commits)


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

Branch: refs/heads/ISIS-1194
Commit: 482462ef21d2c716ad6bced0ec940cdb3be28257
Parents: 2784cc1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Sep 12 09:17:33 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:24 2015 +0100

----------------------------------------------------------------------
 .../internal/RuntimeContextFromSession.java     |   2 +-
 .../system/persistence/PersistenceSession.java  | 108 ++++++++++++++++++-
 2 files changed, 108 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/482462ef/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index 89a1e7b..ad1a1e4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -272,7 +272,7 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
         };
     }
 
-    private static Properties applicationPropertiesFrom(final IsisConfiguration configuration) {
+    public static Properties applicationPropertiesFrom(final IsisConfiguration configuration) {
         final Properties properties = new Properties();
         final IsisConfiguration applicationConfiguration = configuration.getProperties("application");
         for (final String key : applicationConfiguration) {

http://git-wip-us.apache.org/repos/asf/isis/blob/482462ef/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 87b3016..38039ce 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
@@ -23,6 +23,7 @@ import java.lang.reflect.Modifier;
 import java.text.MessageFormat;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import javax.jdo.FetchGroup;
 import javax.jdo.FetchPlan;
@@ -35,7 +36,9 @@ import org.datanucleus.enhancement.Persistable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer2;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -47,6 +50,8 @@ import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAware;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
 import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
@@ -86,6 +91,8 @@ import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 import org.apache.isis.core.runtime.persistence.PojoRefreshException;
 import org.apache.isis.core.runtime.persistence.UnsupportedFindException;
 import org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
+import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerResolve;
+import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
@@ -114,7 +121,7 @@ import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 
 public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager,
-        QuerySubmitter, ObjectPersistor {
+        QuerySubmitter, ObjectPersistor, DomainObjectServices {
 
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
 
@@ -200,6 +207,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
         setState(State.NOT_INITIALIZED);
 
+        // to implement DomainObjectServices
+        final Properties properties = RuntimeContextFromSession.applicationPropertiesFrom(configuration);
+        setProperties(properties);
+
         if (LOG.isDebugEnabled()) {
             LOG.debug("creating " + this);
         }
@@ -362,6 +373,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             final ObjectPersistorAware cast = ObjectPersistorAware.class.cast(candidate);
             cast.setObjectPersistor(this);
         }
+        if (DomainObjectServicesAware.class.isAssignableFrom(candidate.getClass())) {
+            final DomainObjectServicesAware cast = DomainObjectServicesAware.class.cast(candidate);
+            cast.setDomainObjectServices(this);
+        }
     }
 
     //region > QuerySubmitter impl
@@ -1490,6 +1505,97 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //endregion
 
+    //region > DomainObjectServices impl
+
+
+    @Override
+    public Object lookup(Bookmark bookmark) {
+        return new DomainObjectContainerResolve().lookup(bookmark);
+    }
+
+    @Override
+    public Bookmark bookmarkFor(Object domainObject) {
+        return new DomainObjectContainerResolve().bookmarkFor(domainObject);
+    }
+
+    @Override
+    public Bookmark bookmarkFor(Class<?> cls, String identifier) {
+        return new DomainObjectContainerResolve().bookmarkFor(cls, identifier);
+    }
+
+
+    @Override
+    public void resolve(final Object parent) {
+        new DomainObjectContainerResolve().resolve(parent);
+    }
+
+    @Override
+    public void resolve(final Object parent, final Object field) {
+        new DomainObjectContainerResolve().resolve(parent, field);
+    }
+
+    @Override
+    public boolean flush() {
+        return getTransactionManager().flushTransaction();
+    }
+
+    @Override
+    public void commit() {
+        getTransactionManager().endTransaction();
+    }
+
+    @Override
+    public void informUser(final String message) {
+        getCurrentTransaction().getMessageBroker().addMessage(message);
+    }
+
+    @Override
+    public void warnUser(final String message) {
+        getCurrentTransaction().getMessageBroker().addWarning(message);
+    }
+
+    @Override
+    public void raiseError(final String message) {
+        throw new RecoverableException(message);
+    }
+
+    private Properties properties;
+
+    private void setProperties(final Properties properties) {
+        this.properties = properties;
+    }
+
+    @Override
+    public String getProperty(final String name) {
+        return properties.getProperty(name);
+    }
+
+    @Override
+    public List<String> getPropertyNames() {
+        final List<String> list = Lists.newArrayList();
+        for (final Object key : properties.keySet()) {
+            list.add((String) key);
+        }
+        return list;
+    }
+
+
+    @Override
+    public <T> T lookupService(final Class<T> service) {
+        return servicesInjector.lookupService(service);
+    }
+
+    @Override
+    public <T> Iterable<T> lookupServices(final Class<T> service) {
+        return servicesInjector.lookupServices(service);
+    }
+
+
+
+
+    //endregion
+
+
 }
 
 


[04/23] isis git commit: ISIS-1194: removing logging in PersistenceSession - removing the CalledFrom enum

Posted by da...@apache.org.
ISIS-1194: removing logging in PersistenceSession - removing the CalledFrom enum


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

Branch: refs/heads/ISIS-1194
Commit: 5f1b5707c3a5000d421115c1ffa17a860b5c64e2
Parents: 7076c38
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:26:34 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:45 2015 +0100

----------------------------------------------------------------------
 .../persistence/IsisLifecycleListener2.java     | 12 ++---
 .../system/persistence/PersistenceSession.java  | 48 ++++++++++----------
 .../PersistenceQueryProcessorAbstract.java      |  2 +-
 3 files changed, 31 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/5f1b5707/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 2cdde35..09cb735 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -75,7 +75,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.postLoadProcessingFor(pojo, PersistenceSession.CalledFrom.EVENT_LOAD);
+                persistenceSession.postLoadProcessingFor(pojo);
             }});
     }
 
@@ -85,7 +85,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.preStoreProcessingFor(pojo, PersistenceSession.CalledFrom.EVENT_PRESTORE);
+                persistenceSession.preStoreProcessingFor(pojo);
 
             }});
     }
@@ -96,7 +96,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.postStoreProcessingFor(pojo, PersistenceSession.CalledFrom.EVENT_POSTSTORE);
+                persistenceSession.postStoreProcessingFor(pojo);
             }});
     }
 
@@ -106,7 +106,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.preDirtyProcessingFor(pojo, PersistenceSession.CalledFrom.EVENT_PREDIRTY);
+                persistenceSession.preDirtyProcessingFor(pojo);
             }});
     }
 
@@ -128,7 +128,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.preDeleteProcessingFor(pojo, PersistenceSession.CalledFrom.EVENT_PREDELETE);
+                persistenceSession.preDeleteProcessingFor(pojo);
             }
         });
     }
@@ -139,7 +139,7 @@ public class IsisLifecycleListener2
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
-                persistenceSession.postDeleteProcessingFor(pojo, PersistenceSession.CalledFrom.EVENT_POSTDELETE);
+                persistenceSession.postDeleteProcessingFor(pojo);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/5f1b5707/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 4d2e9bf..f3ff12d 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
@@ -759,10 +759,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             return null;
         }
         final Persistable persistenceCapable = (Persistable) pojo;
-        return lazilyLoaded(persistenceCapable, CalledFrom.OS_LAZILYLOADED);
+        return lazilyLoaded(persistenceCapable);
     }
 
-    private ObjectAdapter lazilyLoaded(final Persistable pojo, CalledFrom calledFrom) {
+    private ObjectAdapter lazilyLoaded(final Persistable pojo) {
         return withLogging(pojo, new Callable<ObjectAdapter>() {
             @Override
             public ObjectAdapter call() {
@@ -773,7 +773,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 final ObjectAdapter adapter = mapRecreatedPojo(oid, pojo);
                 return adapter;
             }
-        }, calledFrom);
+        });
     }
 
 
@@ -830,7 +830,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).
-        postLoadProcessingFor((Persistable) domainObject, CalledFrom.OS_RESOLVE);
+        postLoadProcessingFor((Persistable) domainObject);
     }
     //endregion
 
@@ -1243,7 +1243,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     //region > FrameworkSynchronizer delegate methods
 
-    public void postDeleteProcessingFor(final Persistable pojo, final CalledFrom calledFrom) {
+    public void postDeleteProcessingFor(final Persistable pojo) {
         withLogging(pojo, new Runnable() {
             @Override
             public void run() {
@@ -1259,12 +1259,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 // CallbackFacet.Util.callCallback(adapter, RemovedCallbackFacet.class);
 
             }
-        }, calledFrom);
+        });
 
     }
 
 
-    public void preDeleteProcessingFor(final Persistable pojo, final CalledFrom calledFrom) {
+    public void preDeleteProcessingFor(final Persistable pojo) {
         withLogging(pojo, new Runnable() {
             @Override
             public void run() {
@@ -1275,12 +1275,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
                 CallbackFacet.Util.callCallback(adapter, RemovingCallbackFacet.class);
             }
-        }, calledFrom);
+        });
 
     }
 
 
-    public void postLoadProcessingFor(final Persistable pojo, CalledFrom calledFrom) {
+    public void postLoadProcessingFor(final Persistable pojo) {
 
         withLogging(pojo, new Runnable() {
             @Override
@@ -1342,7 +1342,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
                 adapter.setVersion(datastoreVersion);
             }
-        }, calledFrom);
+        });
     }
 
     /**
@@ -1353,7 +1353,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
      * to determine which callback to fire.
      */
-    public void preStoreProcessingFor(final Persistable pojo, final CalledFrom calledFrom) {
+    public void preStoreProcessingFor(final Persistable pojo) {
         withLogging(pojo, new Runnable() {
             @Override
             public void run() {
@@ -1377,7 +1377,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 }
 
             }
-        }, calledFrom);
+        });
     }
 
     /**
@@ -1388,7 +1388,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
      * to determine which callback to fire.
      */
-    public void postStoreProcessingFor(final Persistable pojo, CalledFrom calledFrom) {
+    public void postStoreProcessingFor(final Persistable pojo) {
         withLogging(pojo, new Runnable() {
             @Override
             public void run() {
@@ -1423,7 +1423,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 Version versionIfAny = getVersionIfAny(pojo);
                 adapter.setVersion(versionIfAny);
             }
-        }, calledFrom);
+        });
     }
 
     private Version getVersionIfAny(final Persistable pojo) {
@@ -1431,7 +1431,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
 
 
-    public void preDirtyProcessingFor(final Persistable pojo, CalledFrom calledFrom) {
+    public void preDirtyProcessingFor(final Persistable pojo) {
         withLogging(pojo, new Runnable() {
             @Override
             public void run() {
@@ -1444,7 +1444,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                     // it seems reasonable in this case to simply map into Isis here ("just-in-time"); presumably
                     // DN would not be calling this callback if the pojo was not persistent.
 
-                    adapter = lazilyLoaded(pojo, CalledFrom.EVENT_PREDIRTY);
+                    adapter = lazilyLoaded(pojo);
                     if (adapter == null) {
                         throw new RuntimeException(
                                 "DN could not find objectId for pojo (unexpected) and so could not map into Isis; pojo=["
@@ -1468,12 +1468,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
                 ensureRootObject(pojo);
             }
-        }, calledFrom);
+        });
     }
 
-    private <T> T withLogging(Persistable pojo, Callable<T> runnable, CalledFrom calledFrom) {
+    private <T> T withLogging(Persistable pojo, Callable<T> runnable) {
         if (LOG.isDebugEnabled()) {
-            LOG.debug(logString(calledFrom, LoggingLocation.ENTRY, pojo));
+            LOG.debug(logString(LoggingLocation.ENTRY, pojo));
         }
         try {
             return runnable.call();
@@ -1481,12 +1481,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
             throw new RuntimeException(e);
         } finally {
             if (LOG.isDebugEnabled()) {
-                LOG.debug(logString(calledFrom, LoggingLocation.EXIT, pojo));
+                LOG.debug(logString(LoggingLocation.EXIT, pojo));
             }
         }
     }
 
-    private void withLogging(Persistable pojo, final Runnable runnable, CalledFrom calledFrom) {
+    private void withLogging(Persistable pojo, final Runnable runnable) {
         withLogging(pojo, new Callable<Void>() {
 
             @Override
@@ -1495,13 +1495,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 return null;
             }
 
-        }, calledFrom);
+        });
     }
 
-    private String logString(CalledFrom calledFrom, LoggingLocation location, Persistable pojo) {
+    private String logString(LoggingLocation location, Persistable pojo) {
         final ObjectAdapter adapter = getAdapterFor(pojo);
         // initial spaces just to look better in log when wrapped by IsisLifecycleListener...
-        return calledFrom.name() + " " + location.prefix + " oid=" + (adapter !=null? adapter.getOid(): "(null)") + " ,pojo " + pojo;
+        return location.prefix + " oid=" + (adapter !=null? adapter.getOid(): "(null)") + " ,pojo " + pojo;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/5f1b5707/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 9e6c01c..16b0c60 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
@@ -59,7 +59,7 @@ public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQue
             ObjectAdapter adapter;
             if(pojo instanceof Persistable) {
                 // an entity
-                persistenceSession.postLoadProcessingFor((Persistable) pojo, PersistenceSession.CalledFrom.OS_QUERY);
+                persistenceSession.postLoadProcessingFor((Persistable) pojo);
                 adapter = persistenceSession.getAdapterFor(pojo);
             } else {
                 // a value type


[16/23] isis git commit: ISIS-1194: simplifications to AdapterManager and PersistenceSession

Posted by da...@apache.org.
ISIS-1194: simplifications to AdapterManager and PersistenceSession

- removed adapterFor(Objet, ObjectAdapter parent), since identical to adapterFor(Object)   (now that we no longer have aggregated objects)
- renamed postStoreProcessing to enlistCreated... in PersistenceSession, and removed unnecessary checks.


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

Branch: refs/heads/ISIS-1194
Commit: 5e9cba77fb873136984fdf3a38119d5d5825cde2
Parents: 04ff36a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 19:24:02 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:14 2015 +0100

----------------------------------------------------------------------
 .../metamodel/adapter/mgr/AdapterManager.java   | 11 +--
 .../noruntime/RuntimeContextNoRuntime.java      |  5 --
 .../specimpl/OneToOneAssociationImpl.java       |  2 +-
 .../adaptermanager/AdapterManagerDefault.java   | 83 +++++++++-----------
 .../internal/RuntimeContextFromSession.java     |  5 --
 .../persistence/IsisLifecycleListener2.java     |  4 +-
 .../system/persistence/PersistenceSession.java  | 23 ++----
 ...WrapperFactoryDefaultTest_wrappedObject.java |  4 +-
 8 files changed, 49 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
index 9b8df59..cc0758b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 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.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 /**
@@ -162,10 +161,7 @@ public interface AdapterManager extends Injectable {
      * 
      * <p>
      * The pojo itself is recreated by delegating to a {@link org.apache.isis.core.metamodel.adapter.mgr.AdapterManager}.
-     * The default impl just uses the {@link ObjectSpecification#createObject()};
-     * however object stores (eg JDO/DataNucleus) can provide alternative implementations
-     * in order to ensure that the created pojo is attached to a persistence context.
-     * 
+     *
      * <p>
      * The {@link ConcurrencyChecking} parameter determines whether concurrency checking is performed.
      * If it is requested, then a check is made to ensure that the {@link Oid#getVersion() version} 
@@ -187,11 +183,6 @@ public interface AdapterManager extends Injectable {
     ObjectAdapter adapterFor(Object domainObject);
     
     /**
-     * Looks up or creates a standalone (value), aggregated or root adapter.
-     */
-    ObjectAdapter adapterFor(Object domainObject, ObjectAdapter parentAdapter);
-
-    /**
      * Looks up or creates a collection adapter.
      */
     public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter parentAdapter, OneToManyAssociation collection);

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index d750448..fc8bdae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -121,11 +121,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
             }
 
             @Override
-            public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
             public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final OneToManyAssociation collection) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index 963669f..b4deee8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -148,7 +148,7 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
             return null;
         }
 
-        return getAdapterManager().adapterFor(referencedPojo, ownerAdapter);
+        return getAdapterManager().adapterFor(referencedPojo);
     }
 
     // UNUSED

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index bafb47d..96e6336 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -192,53 +192,6 @@ public class AdapterManagerDefault implements AdapterManager,
         return mapAndInjectServices(newAdapter);
     }
 
-    private ObjectAdapter existingOrValueAdapter(Object pojo) {
-
-        // attempt to locate adapter for the pojo
-        final ObjectAdapter adapter = getAdapterFor(pojo);
-        if (adapter != null) {
-            return adapter;
-        }
-        
-        // pojo may have been lazily loaded by object store, but we haven't yet seen it
-        final ObjectAdapter lazilyLoadedAdapter =
-                pojo instanceof Persistable
-                        ? persistenceSession.mapPersistent((Persistable) pojo)
-                        : null;
-        if(lazilyLoadedAdapter != null) {
-            return lazilyLoadedAdapter;
-        }
-
-        // need to create (and possibly map) the adapter.
-        final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-        
-        // we create value facets as standalone (so not added to maps)
-        if (objSpec.containsFacet(ValueFacet.class)) {
-            ObjectAdapter valueAdapter = createStandaloneAdapter(pojo);
-            return valueAdapter;
-        }
-        
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter parentAdapter) {
-        
-        Ensure.ensureThatArg(parentAdapter, is(not(nullValue())));
-        
-        final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
-        if(existingOrValueAdapter != null) {
-            return existingOrValueAdapter;
-        }
-        
-        final ObjectAdapter newAdapter = createTransientOrViewModelRootAdapter(pojo);
-
-        return mapAndInjectServices(newAdapter);
-    }
-
 
     /**
      * {@inheritDoc}
@@ -295,7 +248,6 @@ public class AdapterManagerDefault implements AdapterManager,
 
 
 
-
     @Override
     public ObjectAdapter adapterFor(final RootOid rootOid) {
         return adapterFor(rootOid, AdapterManager.ConcurrencyChecking.NO_CHECK);
@@ -363,6 +315,41 @@ public class AdapterManagerDefault implements AdapterManager,
         return adapter;
     }
 
+
+    private ObjectAdapter existingOrValueAdapter(Object pojo) {
+
+        // attempt to locate adapter for the pojo
+        ObjectAdapter adapter = getAdapterFor(pojo);
+        if (adapter != null) {
+            return adapter;
+        }
+
+        // pojo may have been lazily loaded by object store, but we haven't yet seen it
+        if (pojo instanceof Persistable) {
+            adapter = persistenceSession.mapPersistent((Persistable) pojo);
+
+            // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
+            // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
+        } else {
+            adapter = null;
+        }
+
+        if(adapter != null) {
+            return adapter;
+        }
+
+        // need to create (and possibly map) the adapter.
+        final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
+
+        // we create value facets as standalone (so not added to maps)
+        if (objSpec.containsFacet(ValueFacet.class)) {
+            adapter = createStandaloneAdapter(pojo);
+            return adapter;
+        }
+
+        return null;
+    }
+
     private Object recreatePojo(RootOid oid) {
         if(oid.isTransient() || oid.isViewModel()) {
             return recreatePojoDefault(oid);

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index c9e852b..89a1e7b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -110,11 +110,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
             }
 
             @Override
-            public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter) {
-                return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter);
-            }
-
-            @Override
             public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final OneToManyAssociation collection) {
                 return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter, collection);
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 4e400bc..42cb9ff 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -85,13 +85,13 @@ public class IsisLifecycleListener2
     @Override
     public void postStore(InstanceLifecycleEvent event) {
         final Persistable pojo = Utils.persistenceCapableFor(event);
-        persistenceSession.postStoreProcessingFor(pojo);
+        persistenceSession.enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(pojo);
     }
 
     @Override
     public void preDirty(InstanceLifecycleEvent event) {
         final Persistable pojo = Utils.persistenceCapableFor(event);
-        persistenceSession.preDirtyProcessingFor(pojo);
+        persistenceSession.enlistUpdatingAndInvokeIsisUpdatingCallback(pojo);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/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 0281482..8448ee6 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
@@ -26,7 +26,6 @@ import java.util.Map;
 
 import javax.jdo.FetchGroup;
 import javax.jdo.FetchPlan;
-import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManager;
 
 import com.google.common.collect.Lists;
@@ -1324,19 +1323,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
      * to determine which callback to fire.
      */
-    public void postStoreProcessingFor(final Persistable pojo) {
-        ensureRootObject(pojo);
-
-        // assert is persistent
-        if (!pojo.dnIsPersistent()) {
-            throw new IllegalStateException(
-                    "Pojo JDO state is not persistent! pojo dnOid: " + JDOHelper.getObjectId(pojo));
-        }
+    public void enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(final Persistable pojo) {
+        final ObjectAdapter objectAdapter = adapterFor(pojo);
 
-        final ObjectAdapter adapter = getAdapterFor(pojo);
-        final RootOid isisOid = (RootOid) adapter.getOid();
+        final ObjectAdapter adapter = objectAdapter;
+        final RootOid rootOid = (RootOid) adapter.getOid(); // ok since this is for a Persistable
 
-        if (isisOid.isTransient()) {
+        if (rootOid.isTransient()) {
             // persisting
             final RootOid persistentOid = oidGenerator.createPersistentOrViewModelOid(pojo);
 
@@ -1346,6 +1339,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
             final IsisTransaction transaction = getCurrentTransaction();
             transaction.enlistCreated(adapter);
+
         } else {
             // updating;
             // the callback and transaction.enlist are done in the preDirty callback
@@ -1358,7 +1352,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
 
 
-    public void preDirtyProcessingFor(final Persistable pojo) {
+    public void enlistUpdatingAndInvokeIsisUpdatingCallback(final Persistable pojo) {
         ObjectAdapter adapter = getAdapterFor(pojo);
         if (adapter == null) {
             // seen this happen in the case when a parent entity (LeaseItem) has a collection of children
@@ -1387,8 +1381,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
         CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
 
-        final IsisTransaction transaction = getCurrentTransaction();
-        transaction.enlistUpdating(adapter);
+        getCurrentTransaction().enlistUpdating(adapter);
 
         ensureRootObject(pojo);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index 19b6d46..7c3559d 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -262,7 +262,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
         context.checking(new Expectations() {
             {
 
-                oneOf(mockAdapterManager).adapterFor("Jones", mockEmployeeAdapter);
+                oneOf(mockAdapterManager).adapterFor("Jones");
                 will(returnValue(mockAdapterForStringJones));
             }
         });
@@ -359,7 +359,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
     private void allowingEmployeeHasSmithAdapter() {
         context.checking(new Expectations() {
             {
-                allowing(mockAdapterManager).adapterFor("Smith", mockEmployeeAdapter);
+                allowing(mockAdapterManager).adapterFor("Smith");
                 will(returnValue(mockAdapterForStringSmith));
 
                 allowing(mockAdapterForStringSmith).getObject();


[21/23] isis git commit: ISIS-1194: moving interfaces for subcomponents of RuntimeContext into different package.

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/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 38039ce..304d5ff 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
@@ -50,13 +50,13 @@ import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAware;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServices;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServicesAware;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistorAware;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
index fd740c6..477591a 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
@@ -27,7 +27,7 @@ import org.junit.Test;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
index f86f7d8..d174594 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
index 869f093..907f8a4 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
@@ -50,8 +50,8 @@ import org.apache.isis.applib.services.wrapper.WrappingObject;
 import org.apache.isis.applib.services.wrapper.listeners.InteractionListener;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistorAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
index 992550f..c071f0d 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -53,7 +53,7 @@ import org.apache.isis.applib.services.wrapper.WrappingObject;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
index 8af36ec..ca9ce5e 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
@@ -26,7 +26,7 @@ import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.ensure.Ensure;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index 7c3559d..8dd24b7 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -35,8 +35,8 @@ import org.apache.isis.applib.services.wrapper.InvalidException;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject_transient.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject_transient.java
index a4f28dd..1890a4d 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject_transient.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject_transient.java
@@ -41,7 +41,7 @@ import org.apache.isis.applib.services.wrapper.DisabledException;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.Allow;
 import org.apache.isis.core.metamodel.consent.Consent;


[22/23] isis git commit: ISIS-1194: moving interfaces for subcomponents of RuntimeContext into different package.

Posted by da...@apache.org.
ISIS-1194: moving interfaces for subcomponents of RuntimeContext into different package.


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

Branch: refs/heads/ISIS-1194
Commit: af2375bb117cd7f06995467da0446cd291ec6ee6
Parents: 482462e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Sep 14 07:28:12 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:26 2015 +0100

----------------------------------------------------------------------
 .../metamodel/adapter/DomainObjectServices.java | 158 -------------------
 .../adapter/DomainObjectServicesAbstract.java   |  29 ----
 .../adapter/DomainObjectServicesAware.java      |  29 ----
 .../metamodel/adapter/LocalizationDefault.java  |  38 -----
 .../metamodel/adapter/LocalizationProvider.java |  29 ----
 .../adapter/LocalizationProviderAbstract.java   |  29 ----
 .../adapter/LocalizationProviderAware.java      |  26 ---
 .../core/metamodel/adapter/ObjectPersistor.java |  41 -----
 .../adapter/ObjectPersistorAbstract.java        |  29 ----
 .../metamodel/adapter/ObjectPersistorAware.java |  29 ----
 .../core/metamodel/adapter/QuerySubmitter.java  |  43 -----
 .../adapter/QuerySubmitterAbstract.java         |  29 ----
 .../metamodel/adapter/QuerySubmitterAware.java  |  26 ---
 .../ChoicesFacetFromBoundedAbstract.java        |   2 +-
 .../ChoicesFacetFromBoundedMarkerInterface.java |   2 +-
 ...sFacetFromBoundedMarkerInterfaceFactory.java |   4 +-
 .../DomainObjectAnnotationFacetFactory.java     |   4 +-
 .../ChoicesFacetForDomainObjectAnnotation.java  |   2 +-
 .../ChoicesFacetFromBoundedAnnotation.java      |   2 +-
 .../runtimecontext/DomainObjectServices.java    | 158 +++++++++++++++++++
 .../DomainObjectServicesAbstract.java           |  29 ++++
 .../DomainObjectServicesAware.java              |  29 ++++
 .../runtimecontext/LocalizationDefault.java     |  38 +++++
 .../runtimecontext/LocalizationProvider.java    |  29 ++++
 .../LocalizationProviderAbstract.java           |  29 ++++
 .../LocalizationProviderAware.java              |  26 +++
 .../runtimecontext/ObjectPersistor.java         |  42 +++++
 .../runtimecontext/ObjectPersistorAbstract.java |  29 ++++
 .../runtimecontext/ObjectPersistorAware.java    |  29 ++++
 .../runtimecontext/QuerySubmitter.java          |  44 ++++++
 .../runtimecontext/QuerySubmitterAbstract.java  |  29 ++++
 .../runtimecontext/QuerySubmitterAware.java     |  26 +++
 .../runtimecontext/RuntimeContext.java          |   4 -
 .../noruntime/RuntimeContextNoRuntime.java      |  18 +--
 .../bookmarks/BookmarkServiceDefault.java       |   4 +-
 .../container/DomainObjectContainerDefault.java |  16 +-
 .../spec/feature/ObjectMemberDependencies.java  |   2 +-
 .../specimpl/ObjectActionParameterAbstract.java |   2 +-
 .../specimpl/ObjectMemberAbstract.java          |   2 +-
 .../metamodel/app/IsisMetaModelTest_init.java   |   2 +-
 .../TitleAnnotationFacetFactoryTest.java        |   4 +-
 .../TitleFacetViaTitleAnnotationTest.java       |   2 +-
 ...inObjectContainerDefaultTest_allMatches.java |   2 +-
 .../internal/RuntimeContextFromSession.java     |  14 +-
 .../runtime/system/context/IsisContext.java     |   2 +-
 .../system/persistence/PersistenceSession.java  |  12 +-
 .../runtime/system/ObjectActionImplTest.java    |   2 +-
 .../system/OneToManyAssociationImplTest.java    |   2 +-
 .../core/wrapper/WrapperFactoryDefault.java     |   4 +-
 .../handlers/DomainObjectInvocationHandler.java |   2 +-
 .../wrapper/handlers/ProxyContextHandler.java   |   2 +-
 ...WrapperFactoryDefaultTest_wrappedObject.java |   4 +-
 ...toryDefaultTest_wrappedObject_transient.java |   2 +-
 53 files changed, 595 insertions(+), 597 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java
deleted file mode 100644
index a6a7547..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-import java.util.List;
-
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.core.commons.components.Injectable;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAbstract;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public interface DomainObjectServices extends Injectable {
-
-    // ///////////////////////////////////////////
-    // Instantiate
-    // ///////////////////////////////////////////
-
-    /**
-     * Provided by the <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    ObjectAdapter createTransientInstance(ObjectSpecification spec);
-
-    ObjectAdapter createViewModelInstance(ObjectSpecification spec, String memento);
-
-
-    // ///////////////////////////////////////////
-    // services
-    // ///////////////////////////////////////////
-
-    void injectServicesInto(Object domainObject);
-
-    <T> T lookupService(Class<T> service);
-
-    <T> Iterable<T> lookupServices(Class<T> service);
-
-    // ///////////////////////////////////////////
-    // retrieve
-    // ///////////////////////////////////////////
-
-    /**
-     * Provided by <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void resolve(Object parent);
-
-    /**
-     * Provided by <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void resolve(Object parent, Object field);
-
-    /**
-     * Provided by <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>BookmarkServicesDefault</tt>.
-     * @return 
-     */
-    Object lookup(Bookmark bookmark);
-
-    Bookmark bookmarkFor(Object domainObject);
-
-    Bookmark bookmarkFor(Class<?> cls, String identifier);
-
-    
-    // ///////////////////////////////////////////
-    // flush, commit
-    // ///////////////////////////////////////////
-
-    /**
-     * Provided by <tt>TransactionManager</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    boolean flush();
-
-    /**
-     * Provided by <tt>TransactionManager</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void commit();
-
-    // //////////////////////////////////////////////////////////////////
-    // info, warn, error messages
-    // //////////////////////////////////////////////////////////////////
-
-    /**
-     * Provided by <tt>MessageBroker</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void informUser(String message);
-
-    /**
-     * Provided by <tt>MessageBroker</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void warnUser(String message);
-
-    /**
-     * Provided by <tt>MessageBroker</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void raiseError(String message);
-
-    // //////////////////////////////////////////////////////////////////
-    // properties
-    // //////////////////////////////////////////////////////////////////
-
-    /**
-     * Provided by {@link RuntimeContextAbstract} itself, cloned properties from
-     * {@link IsisConfiguration}.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    String getProperty(String name);
-
-    /**
-     * Provided by {@link RuntimeContextAbstract} itself, cloned properties from
-     * {@link IsisConfiguration}.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    List<String> getPropertyNames();
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAbstract.java
deleted file mode 100644
index 838ac95..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAbstract.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-public abstract class DomainObjectServicesAbstract implements DomainObjectServices {
-
-    @Override
-    public void injectInto(final Object candidate) {
-        if (DomainObjectServicesAware.class.isAssignableFrom(candidate.getClass())) {
-            final DomainObjectServicesAware cast = DomainObjectServicesAware.class.cast(candidate);
-            cast.setDomainObjectServices(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
deleted file mode 100644
index 679258a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.adapter;
-
-import org.apache.isis.applib.annotation.Programmatic;
-
-public interface DomainObjectServicesAware {
-
-    @Programmatic
-    public void setDomainObjectServices(DomainObjectServices domainObjectServices);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationDefault.java
deleted file mode 100644
index bda73e5..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationDefault.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.adapter;
-
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.apache.isis.applib.profiles.Localization;
-
-public final class LocalizationDefault implements Localization {
-
-    @Override
-    public Locale getLocale() {
-        return Locale.getDefault();
-    }
-
-    @Override
-    public TimeZone getTimeZone() {
-        return TimeZone.getDefault();
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProvider.java
deleted file mode 100644
index 21ce932..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProvider.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.adapter;
-
-import org.apache.isis.applib.profiles.Localization;
-import org.apache.isis.core.commons.components.Injectable;
-
-public interface LocalizationProvider extends Injectable {
-
-    Localization getLocalization();
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAbstract.java
deleted file mode 100644
index 02860eb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAbstract.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-public abstract class LocalizationProviderAbstract implements LocalizationProvider {
-
-    @Override
-    public void injectInto(final Object candidate) {
-        if (LocalizationProviderAware.class.isAssignableFrom(candidate.getClass())) {
-            final LocalizationProviderAware cast = LocalizationProviderAware.class.cast(candidate);
-            cast.setLocalizationProvider(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAware.java
deleted file mode 100644
index 1fdd8ff..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/LocalizationProviderAware.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.adapter;
-
-public interface LocalizationProviderAware {
-
-    void setLocalizationProvider(LocalizationProvider localizationProvider);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistor.java
deleted file mode 100644
index 6267c9d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistor.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-import org.apache.isis.core.commons.components.Injectable;
-
-public interface ObjectPersistor extends Injectable {
-
-    /**
-     * Provided by the <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt> and also by
-     * <tt>DomainObjectInvocationHandler#handleSaveMethod()</tt>.
-     */
-    void makePersistent(ObjectAdapter adapter);
-
-    /**
-     * Provided by <tt>UpdateNotifier</tt> and <tt>PersistenceSession</tt> when
-     * used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    void remove(ObjectAdapter adapter);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAbstract.java
deleted file mode 100644
index 5d5b827..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAbstract.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-public abstract class ObjectPersistorAbstract implements ObjectPersistor {
-
-    @Override
-    public void injectInto(final Object candidate) {
-        if (ObjectPersistorAware.class.isAssignableFrom(candidate.getClass())) {
-            final ObjectPersistorAware cast = ObjectPersistorAware.class.cast(candidate);
-            cast.setObjectPersistor(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAware.java
deleted file mode 100644
index 1a6cce3..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectPersistorAware.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.adapter;
-
-import org.apache.isis.applib.annotation.Programmatic;
-
-public interface ObjectPersistorAware {
-
-    @Programmatic
-    public void setObjectPersistor(final ObjectPersistor objectPersistor);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitter.java
deleted file mode 100644
index 0bbe3bf..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-import java.util.List;
-
-import org.apache.isis.applib.query.Query;
-import org.apache.isis.core.commons.components.Injectable;
-
-public interface QuerySubmitter extends Injectable {
-
-    /**
-     * Provided by <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt> and also by the choices
-     * facets.
-     */
-    <T> List<ObjectAdapter> allMatchingQuery(Query<T> query);
-
-    /**
-     * Provided by <tt>PersistenceSession</tt> when used by framework.
-     * 
-     * <p>
-     * Called by <tt>DomainObjectContainerDefault</tt>.
-     */
-    <T> ObjectAdapter firstMatchingQuery(Query<T> query);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAbstract.java
deleted file mode 100644
index 81c8603..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAbstract.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.adapter;
-
-public abstract class QuerySubmitterAbstract implements QuerySubmitter {
-
-    @Override
-    public void injectInto(final Object candidate) {
-        if (QuerySubmitterAware.class.isAssignableFrom(candidate.getClass())) {
-            final QuerySubmitterAware cast = QuerySubmitterAware.class.cast(candidate);
-            cast.setQuerySubmitter(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAware.java
deleted file mode 100644
index 098f7f2..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/QuerySubmitterAware.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.adapter;
-
-public interface QuerySubmitterAware {
-
-    public void setQuerySubmitter(final QuerySubmitter querySubmitter);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
index a651278..6a4b7cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.query.QueryFindAllInstances;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterface.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterface.java
index 386b80c..d8ba20b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterface.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterface.java
@@ -20,7 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.choices.boundedmarkerifc;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterfaceFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterfaceFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterfaceFactory.java
index 8b157f9..1e57ba5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterfaceFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedmarkerifc/ChoicesFacetFromBoundedMarkerInterfaceFactory.java
@@ -22,8 +22,8 @@ package org.apache.isis.core.metamodel.facets.object.choices.boundedmarkerifc;
 import java.lang.reflect.Method;
 
 import org.apache.isis.applib.marker.Bounded;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 09d6f5b..91c0597 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -32,8 +32,8 @@ import org.apache.isis.applib.annotation.PublishedObject;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.facetapi.Facet;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetForDomainObjectAnnotation.java
index d0ecea2..53747b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetForDomainObjectAnnotation.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.domainobject.choices;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
index 4f1f7a8..a6dc09b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.domainobject.choices;
 
 import org.apache.isis.applib.annotation.Bounded;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
new file mode 100644
index 0000000..5041de2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
@@ -0,0 +1,158 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import java.util.List;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.commons.components.Injectable;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public interface DomainObjectServices extends Injectable {
+
+    // ///////////////////////////////////////////
+    // Instantiate
+    // ///////////////////////////////////////////
+
+    /**
+     * Provided by the <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    ObjectAdapter createTransientInstance(ObjectSpecification spec);
+
+    ObjectAdapter createViewModelInstance(ObjectSpecification spec, String memento);
+
+
+    // ///////////////////////////////////////////
+    // services
+    // ///////////////////////////////////////////
+
+    void injectServicesInto(Object domainObject);
+
+    <T> T lookupService(Class<T> service);
+
+    <T> Iterable<T> lookupServices(Class<T> service);
+
+    // ///////////////////////////////////////////
+    // retrieve
+    // ///////////////////////////////////////////
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void resolve(Object parent);
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void resolve(Object parent, Object field);
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>BookmarkServicesDefault</tt>.
+     * @return 
+     */
+    Object lookup(Bookmark bookmark);
+
+    Bookmark bookmarkFor(Object domainObject);
+
+    Bookmark bookmarkFor(Class<?> cls, String identifier);
+
+    
+    // ///////////////////////////////////////////
+    // flush, commit
+    // ///////////////////////////////////////////
+
+    /**
+     * Provided by <tt>TransactionManager</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    boolean flush();
+
+    /**
+     * Provided by <tt>TransactionManager</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void commit();
+
+    // //////////////////////////////////////////////////////////////////
+    // info, warn, error messages
+    // //////////////////////////////////////////////////////////////////
+
+    /**
+     * Provided by <tt>MessageBroker</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void informUser(String message);
+
+    /**
+     * Provided by <tt>MessageBroker</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void warnUser(String message);
+
+    /**
+     * Provided by <tt>MessageBroker</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void raiseError(String message);
+
+    // //////////////////////////////////////////////////////////////////
+    // properties
+    // //////////////////////////////////////////////////////////////////
+
+    /**
+     * Provided by {@link RuntimeContextAbstract} itself, cloned properties from
+     * {@link IsisConfiguration}.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    String getProperty(String name);
+
+    /**
+     * Provided by {@link RuntimeContextAbstract} itself, cloned properties from
+     * {@link IsisConfiguration}.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    List<String> getPropertyNames();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAbstract.java
new file mode 100644
index 0000000..0f22408
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAbstract.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+public abstract class DomainObjectServicesAbstract implements DomainObjectServices {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (DomainObjectServicesAware.class.isAssignableFrom(candidate.getClass())) {
+            final DomainObjectServicesAware cast = DomainObjectServicesAware.class.cast(candidate);
+            cast.setDomainObjectServices(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAware.java
new file mode 100644
index 0000000..9c41745
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServicesAware.java
@@ -0,0 +1,29 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+public interface DomainObjectServicesAware {
+
+    @Programmatic
+    public void setDomainObjectServices(DomainObjectServices domainObjectServices);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationDefault.java
new file mode 100644
index 0000000..ac6b75d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationDefault.java
@@ -0,0 +1,38 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.isis.applib.profiles.Localization;
+
+public final class LocalizationDefault implements Localization {
+
+    @Override
+    public Locale getLocale() {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public TimeZone getTimeZone() {
+        return TimeZone.getDefault();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProvider.java
new file mode 100644
index 0000000..a59b2af
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProvider.java
@@ -0,0 +1,29 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import org.apache.isis.applib.profiles.Localization;
+import org.apache.isis.core.commons.components.Injectable;
+
+public interface LocalizationProvider extends Injectable {
+
+    Localization getLocalization();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAbstract.java
new file mode 100644
index 0000000..1b044dd
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAbstract.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+public abstract class LocalizationProviderAbstract implements LocalizationProvider {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (LocalizationProviderAware.class.isAssignableFrom(candidate.getClass())) {
+            final LocalizationProviderAware cast = LocalizationProviderAware.class.cast(candidate);
+            cast.setLocalizationProvider(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAware.java
new file mode 100644
index 0000000..fe64e29
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/LocalizationProviderAware.java
@@ -0,0 +1,26 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.runtimecontext;
+
+public interface LocalizationProviderAware {
+
+    void setLocalizationProvider(LocalizationProvider localizationProvider);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistor.java
new file mode 100644
index 0000000..443a0ad
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistor.java
@@ -0,0 +1,42 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import org.apache.isis.core.commons.components.Injectable;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+
+public interface ObjectPersistor extends Injectable {
+
+    /**
+     * Provided by the <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt> and also by
+     * <tt>DomainObjectInvocationHandler#handleSaveMethod()</tt>.
+     */
+    void makePersistent(ObjectAdapter adapter);
+
+    /**
+     * Provided by <tt>UpdateNotifier</tt> and <tt>PersistenceSession</tt> when
+     * used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    void remove(ObjectAdapter adapter);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAbstract.java
new file mode 100644
index 0000000..258318c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAbstract.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+public abstract class ObjectPersistorAbstract implements ObjectPersistor {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (ObjectPersistorAware.class.isAssignableFrom(candidate.getClass())) {
+            final ObjectPersistorAware cast = ObjectPersistorAware.class.cast(candidate);
+            cast.setObjectPersistor(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAware.java
new file mode 100644
index 0000000..c772b98
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ObjectPersistorAware.java
@@ -0,0 +1,29 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+public interface ObjectPersistorAware {
+
+    @Programmatic
+    public void setObjectPersistor(final ObjectPersistor objectPersistor);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitter.java
new file mode 100644
index 0000000..311fb3e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitter.java
@@ -0,0 +1,44 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+import java.util.List;
+
+import org.apache.isis.applib.query.Query;
+import org.apache.isis.core.commons.components.Injectable;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+
+public interface QuerySubmitter extends Injectable {
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt> and also by the choices
+     * facets.
+     */
+    <T> List<ObjectAdapter> allMatchingQuery(Query<T> query);
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    <T> ObjectAdapter firstMatchingQuery(Query<T> query);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAbstract.java
new file mode 100644
index 0000000..743ea5a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAbstract.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.runtimecontext;
+
+public abstract class QuerySubmitterAbstract implements QuerySubmitter {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (QuerySubmitterAware.class.isAssignableFrom(candidate.getClass())) {
+            final QuerySubmitterAware cast = QuerySubmitterAware.class.cast(candidate);
+            cast.setQuerySubmitter(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAware.java
new file mode 100644
index 0000000..df195ec
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/QuerySubmitterAware.java
@@ -0,0 +1,26 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.runtimecontext;
+
+public interface QuerySubmitterAware {
+
+    public void setQuerySubmitter(final QuerySubmitter querySubmitter);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
index 223b42e..ba2c8ac 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
@@ -23,10 +23,6 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.Injectable;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
-import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index fc8bdae..bc1c814 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -27,16 +27,16 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAbstract;
-import org.apache.isis.core.metamodel.adapter.LocalizationDefault;
-import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
-import org.apache.isis.core.metamodel.adapter.LocalizationProviderAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServices;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServicesAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationDefault;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProvider;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAbstract;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistorAbstract;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistorAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitterAbstract;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
index 3d30c6d..86e6874 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
@@ -25,8 +25,8 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAware;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServices;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServicesAware;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 
 /**

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index 2905925..33d8aa6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -54,15 +54,15 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAware;
-import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
-import org.apache.isis.core.metamodel.adapter.LocalizationProviderAware;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServices;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServicesAware;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProvider;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAware;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistorAware;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
index c792613..84d3554 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
@@ -16,7 +16,7 @@
  */
 package org.apache.isis.core.metamodel.spec.feature;
 
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 38ed345..c7d87f4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.Allow;
 import org.apache.isis.core.metamodel.consent.Consent;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 5c74338..0cdd9b8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
index 87baaa5..cb136c0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
@@ -33,7 +33,7 @@ import org.junit.Test;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProviderAbstract;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
index 556ec09..85d3ae1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
@@ -32,8 +32,8 @@ import org.junit.Test;
 
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.adapter.LocalizationDefault;
-import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationDefault;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
index 5bb9bec..8b4d739 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
@@ -35,7 +35,7 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.applib.annotation.Title;
-import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefaultTest_allMatches.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefaultTest_allMatches.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefaultTest_allMatches.java
index 666d060..c2a3e6c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefaultTest_allMatches.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefaultTest_allMatches.java
@@ -29,7 +29,7 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.applib.query.Query;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServices;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index ad1a1e4..b1d599c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -31,14 +31,14 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
 import org.apache.isis.core.commons.authentication.MessageBroker;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
-import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAbstract;
-import org.apache.isis.core.metamodel.adapter.LocalizationProviderAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServices;
+import org.apache.isis.core.metamodel.runtimecontext.DomainObjectServicesAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAbstract;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistorAbstract;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistor;
+import org.apache.isis.core.metamodel.runtimecontext.ObjectPersistorAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitter;
+import org.apache.isis.core.metamodel.runtimecontext.QuerySubmitterAbstract;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;

http://git-wip-us.apache.org/repos/asf/isis/blob/af2375bb/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index 7414c0d..0b91269 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -33,7 +33,7 @@ import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.debug.DebugList;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.metamodel.adapter.LocalizationDefault;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationDefault;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;


[05/23] isis git commit: ISIS-1194: removing logging from PersistenceSession#lazilyLoading

Posted by da...@apache.org.
ISIS-1194: removing logging from PersistenceSession#lazilyLoading


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

Branch: refs/heads/ISIS-1194
Commit: 16a380a8770fae18eb2f2319bfc08fb7e8964724
Parents: 5f1b570
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:28:08 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:48 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java     | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/16a380a8/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 f3ff12d..79dc26f 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
@@ -763,17 +763,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
 
     private ObjectAdapter lazilyLoaded(final Persistable pojo) {
-        return withLogging(pojo, new Callable<ObjectAdapter>() {
-            @Override
-            public ObjectAdapter call() {
-                if (getJdoObjectId(pojo) == null) {
-                    return null;
-                }
-                final RootOid oid = createPersistentOrViewModelOid(pojo);
-                final ObjectAdapter adapter = mapRecreatedPojo(oid, pojo);
-                return adapter;
-            }
-        });
+        if (getJdoObjectId(pojo) == null) {
+            return null;
+        }
+        final RootOid oid = createPersistentOrViewModelOid(pojo);
+        final ObjectAdapter adapter = mapRecreatedPojo(oid, pojo);
+        return adapter;
     }
 
 


[17/23] isis git commit: ISIS-1194: intention is to inline AdapterManager into PersistenceSession; as a start, PersistenceSession now implements AdapterManager interface

Posted by da...@apache.org.
ISIS-1194: intention is to inline AdapterManager into PersistenceSession; as a start, PersistenceSession now implements AdapterManager interface


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

Branch: refs/heads/ISIS-1194
Commit: fa309dc487c61e425c12d46e8c27564836bb160b
Parents: 5e9cba7
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Sep 12 08:51:15 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:17 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java  | 43 +++++++++++++++++++-
 1 file changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fa309dc4/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 8448ee6..6405ee2 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
@@ -49,6 +49,7 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 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;
@@ -73,6 +74,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
@@ -106,7 +108,7 @@ import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 
-public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle {
+public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager {
 
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
 
@@ -335,6 +337,14 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         setState(State.CLOSED);
     }
 
+    @Override
+    public void injectInto(final Object candidate) {
+        if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
+            final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
+            cast.setAdapterManager(this);
+        }
+    }
+
     //endregion
 
     //region > State
@@ -1178,24 +1188,53 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
     // endregion
 
-    //region > AdapterManager delegate methods
+    //region > AdapterManager implementation
+    @Override
+    public ObjectAdapter getAdapterFor(final Oid oid) {
+        return adapterManager.getAdapterFor(oid);
+    }
 
+    @Override
     public ObjectAdapter getAdapterFor(final Object pojo) {
         return adapterManager.getAdapterFor(pojo);
     }
 
+    @Override
+    public ObjectAdapter adapterFor(final RootOid oid) {
+        return adapterManager.adapterFor(oid);
+    }
+
+    @Override
+    public ObjectAdapter adapterFor(
+            final RootOid oid,
+            final ConcurrencyChecking concurrencyChecking) {
+        return adapterManager.adapterFor(oid, concurrencyChecking);
+    }
+
     public ObjectAdapter adapterFor(final Object pojo) {
         return adapterManager.adapterFor(pojo);
     }
 
+    @Override
+    public ObjectAdapter adapterFor(
+            final Object pojo, final ObjectAdapter parentAdapter, final OneToManyAssociation collection) {
+        return adapterManager.adapterFor(pojo, parentAdapter, collection);
+    }
+
     public void remapAsPersistent(final ObjectAdapter adapter, RootOid hintRootOid) {
         adapterManager.remapAsPersistent(adapter, hintRootOid);
     }
 
+    @Override
     public ObjectAdapter mapRecreatedPojo(final Oid oid, final Object recreatedPojo) {
         return adapterManager.mapRecreatedPojo(oid, recreatedPojo);
     }
 
+    @Override
+    public void removeAdapter(final ObjectAdapter adapter) {
+        adapterManager.removeAdapter(adapter);
+    }
+
     public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
         adapterManager.remapRecreatedPojo(adapter, pojo);
     }


[10/23] isis git commit: ISIS-1194: removing logging in IsisLifecycleListener2

Posted by da...@apache.org.
ISIS-1194: removing logging in IsisLifecycleListener2


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

Branch: refs/heads/ISIS-1194
Commit: 1d5431a473171789cdd9bf0d1e04a5cadc7e5336
Parents: e8456b7
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:51:58 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:00 2015 +0100

----------------------------------------------------------------------
 .../persistence/IsisLifecycleListener2.java     | 35 ++++++++------------
 1 file changed, 13 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1d5431a4/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 1657fcd..d40a238 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -56,22 +56,22 @@ public class IsisLifecycleListener2
 
     @Override
     public void postCreate(final InstanceLifecycleEvent event) {
-        withLogging(Phase.POST, event, new RunnableNoop(event));
+        withLogging(new RunnableNoop(event));
     }
 
     @Override
     public void preAttach(final InstanceLifecycleEvent event) {
-        withLogging(Phase.PRE, event, new RunnableEnsureRootObject(event));
+        withLogging(new RunnableEnsureRootObject(event));
     }
 
     @Override
     public void postAttach(final InstanceLifecycleEvent event) {
-        withLogging(Phase.POST, event, new RunnableEnsureRootObject(event));
+        withLogging(new RunnableEnsureRootObject(event));
     }
 
     @Override
     public void postLoad(final InstanceLifecycleEvent event) {
-        withLogging(Phase.POST, event, new RunnableAbstract(event){
+        withLogging(new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
@@ -81,7 +81,7 @@ public class IsisLifecycleListener2
 
 	@Override
     public void preStore(InstanceLifecycleEvent event) {
-        withLogging(Phase.PRE, event, new RunnableAbstract(event){
+        withLogging(new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
@@ -92,7 +92,7 @@ public class IsisLifecycleListener2
 
     @Override
     public void postStore(InstanceLifecycleEvent event) {
-        withLogging(Phase.POST, event, new RunnableAbstract(event){
+        withLogging(new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
@@ -102,7 +102,7 @@ public class IsisLifecycleListener2
 
     @Override
     public void preDirty(InstanceLifecycleEvent event) {
-        withLogging(Phase.PRE, event, new RunnableAbstract(event){
+        withLogging(new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
@@ -118,13 +118,13 @@ public class IsisLifecycleListener2
         //
         // 1<->m bidirectional, persistence-by-reachability
 
-        withLogging(Phase.POST, event, new RunnableNoop(event));
+        withLogging(new RunnableNoop(event));
     }
 
     @Override
     public void preDelete(InstanceLifecycleEvent event) {
 
-        withLogging(Phase.PRE, event, new RunnableAbstract(event){
+        withLogging(new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
@@ -162,12 +162,12 @@ public class IsisLifecycleListener2
 
     @Override
     public void preDetach(InstanceLifecycleEvent event) {
-        withLogging(Phase.PRE, event, new RunnableEnsureRootObject(event));
+        withLogging(new RunnableEnsureRootObject(event));
     }
 
     @Override
     public void postDetach(InstanceLifecycleEvent event) {
-        withLogging(Phase.POST, event, new RunnableEnsureRootObject(event));
+        withLogging(new RunnableEnsureRootObject(event));
     }
 
     
@@ -175,17 +175,8 @@ public class IsisLifecycleListener2
     // withLogging
     /////////////////////////////////////////////////////////////////////////
 
-    private void withLogging(Phase phase, InstanceLifecycleEvent event, Runnable runnable) {
-        if (IsisLifecycleListener.LOG.isDebugEnabled()) {
-            IsisLifecycleListener.LOG.debug(logString(phase, LoggingLocation.ENTRY, event));
-        }
-        try {
-            runnable.run();
-        } finally {
-            if (IsisLifecycleListener.LOG.isDebugEnabled()) {
-                IsisLifecycleListener.LOG.debug(logString(phase, LoggingLocation.EXIT, event));
-            }
-        }
+    private void withLogging(Runnable runnable) {
+        runnable.run();
     }
     
     private abstract class RunnableAbstract implements Runnable {


[03/23] isis git commit: ISIS-1195: reference Isis DSL on website (documentation page).

Posted by da...@apache.org.
ISIS-1195: reference Isis DSL on website (documentation page).


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

Branch: refs/heads/ISIS-1194
Commit: 7076c38a662f5a8d8e5141c620e8250375e16a2e
Parents: 620bc32
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:22:34 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:43 2015 +0100

----------------------------------------------------------------------
 adocs/documentation/src/main/asciidoc/documentation.adoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/7076c38a/adocs/documentation/src/main/asciidoc/documentation.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/documentation.adoc b/adocs/documentation/src/main/asciidoc/documentation.adoc
index d1c6c41..36a8e9b 100644
--- a/adocs/documentation/src/main/asciidoc/documentation.adoc
+++ b/adocs/documentation/src/main/asciidoc/documentation.adoc
@@ -48,6 +48,7 @@ pass:[<br/>]
 *Isis Add-ons*
 
 * http://isisaddons.org[Isis addons] (not ASF)
+* link:https://github.com/isisaddons/isis-app-simpledsl/[isis-script DSL] (not ASF)
 
 
 |===


[11/23] isis git commit: ISIS-1194: simplifying logging in IsisLifecycleListener2

Posted by da...@apache.org.
ISIS-1194: simplifying logging in IsisLifecycleListener2


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

Branch: refs/heads/ISIS-1194
Commit: 6243d5248175bdcbc498b6e851f20896a5cd3393
Parents: 1d5431a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:52:48 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:02 2015 +0100

----------------------------------------------------------------------
 .../persistence/IsisLifecycleListener2.java     | 36 +++++++++-----------
 1 file changed, 16 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6243d524/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index d40a238..68a966a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -56,58 +56,58 @@ public class IsisLifecycleListener2
 
     @Override
     public void postCreate(final InstanceLifecycleEvent event) {
-        withLogging(new RunnableNoop(event));
+        new RunnableNoop(event).run();
     }
 
     @Override
     public void preAttach(final InstanceLifecycleEvent event) {
-        withLogging(new RunnableEnsureRootObject(event));
+        new RunnableEnsureRootObject(event).run();
     }
 
     @Override
     public void postAttach(final InstanceLifecycleEvent event) {
-        withLogging(new RunnableEnsureRootObject(event));
+        new RunnableEnsureRootObject(event).run();
     }
 
     @Override
     public void postLoad(final InstanceLifecycleEvent event) {
-        withLogging(new RunnableAbstract(event){
+        new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
                 persistenceSession.initializeMapAndCheckConcurrency(pojo);
-            }});
+            }}.run();
     }
 
 	@Override
     public void preStore(InstanceLifecycleEvent event) {
-        withLogging(new RunnableAbstract(event){
+        new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
                 persistenceSession.invokeIsisPersistingCallback(pojo);
 
-            }});
+            }}.run();
     }
 
     @Override
     public void postStore(InstanceLifecycleEvent event) {
-        withLogging(new RunnableAbstract(event){
+        new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
                 persistenceSession.postStoreProcessingFor(pojo);
-            }});
+            }}.run();
     }
 
     @Override
     public void preDirty(InstanceLifecycleEvent event) {
-        withLogging(new RunnableAbstract(event){
+        new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
                 persistenceSession.preDirtyProcessingFor(pojo);
-            }});
+            }}.run();
     }
 
     @Override
@@ -118,19 +118,19 @@ public class IsisLifecycleListener2
         //
         // 1<->m bidirectional, persistence-by-reachability
 
-        withLogging(new RunnableNoop(event));
+        new RunnableNoop(event).run();
     }
 
     @Override
     public void preDelete(InstanceLifecycleEvent event) {
 
-        withLogging(new RunnableAbstract(event){
+        new RunnableAbstract(event){
             @Override
             protected void doRun() {
                 final Persistable pojo = Utils.persistenceCapableFor(event);
                 persistenceSession.invokeIsisRemovingCallback(pojo);
             }
-        });
+        }.run();
     }
 
     @Override
@@ -162,12 +162,12 @@ public class IsisLifecycleListener2
 
     @Override
     public void preDetach(InstanceLifecycleEvent event) {
-        withLogging(new RunnableEnsureRootObject(event));
+        new RunnableEnsureRootObject(event).run();
     }
 
     @Override
     public void postDetach(InstanceLifecycleEvent event) {
-        withLogging(new RunnableEnsureRootObject(event));
+        new RunnableEnsureRootObject(event).run();
     }
 
     
@@ -175,10 +175,6 @@ public class IsisLifecycleListener2
     // withLogging
     /////////////////////////////////////////////////////////////////////////
 
-    private void withLogging(Runnable runnable) {
-        runnable.run();
-    }
-    
     private abstract class RunnableAbstract implements Runnable {
         final InstanceLifecycleEvent event;
         public RunnableAbstract(final InstanceLifecycleEvent event) {


[06/23] isis git commit: ISIS-1194: removing PersistenceSession logging for those methods calling withLogging(Runnable) ...

Posted by da...@apache.org.
ISIS-1194: removing PersistenceSession logging for those methods calling withLogging(Runnable) ...


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

Branch: refs/heads/ISIS-1194
Commit: 61ebb2fb6ec3379ae780dcdfc081c84d2bdf5187
Parents: 16a380a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 18:29:50 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:50 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java  | 36 +++++++-------------
 1 file changed, 12 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/61ebb2fb/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 79dc26f..b18470d 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
@@ -1239,7 +1239,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     //region > FrameworkSynchronizer delegate methods
 
     public void postDeleteProcessingFor(final Persistable pojo) {
-        withLogging(pojo, new Runnable() {
+        new Runnable() {
             @Override
             public void run() {
                 ObjectAdapter adapter = getAdapterFor(pojo);
@@ -1254,13 +1254,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 // CallbackFacet.Util.callCallback(adapter, RemovedCallbackFacet.class);
 
             }
-        });
+        }.run();
 
     }
 
 
     public void preDeleteProcessingFor(final Persistable pojo) {
-        withLogging(pojo, new Runnable() {
+        new Runnable() {
             @Override
             public void run() {
                 ObjectAdapter adapter = adapterFor(pojo);
@@ -1270,14 +1270,14 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
                 CallbackFacet.Util.callCallback(adapter, RemovingCallbackFacet.class);
             }
-        });
+        }.run();
 
     }
 
 
     public void postLoadProcessingFor(final Persistable pojo) {
 
-        withLogging(pojo, new Runnable() {
+        new Runnable() {
             @Override
             public void run() {
                 final Persistable pc = pojo;
@@ -1337,7 +1337,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
                 adapter.setVersion(datastoreVersion);
             }
-        });
+        }.run();
     }
 
     /**
@@ -1349,7 +1349,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * to determine which callback to fire.
      */
     public void preStoreProcessingFor(final Persistable pojo) {
-        withLogging(pojo, new Runnable() {
+        new Runnable() {
             @Override
             public void run() {
                 final ObjectAdapter adapter = getAdapterFor(pojo);
@@ -1372,7 +1372,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 }
 
             }
-        });
+        }.run();
     }
 
     /**
@@ -1384,7 +1384,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * to determine which callback to fire.
      */
     public void postStoreProcessingFor(final Persistable pojo) {
-        withLogging(pojo, new Runnable() {
+        new Runnable() {
             @Override
             public void run() {
                 ensureRootObject(pojo);
@@ -1418,7 +1418,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                 Version versionIfAny = getVersionIfAny(pojo);
                 adapter.setVersion(versionIfAny);
             }
-        });
+        }.run();
     }
 
     private Version getVersionIfAny(final Persistable pojo) {
@@ -1427,7 +1427,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
 
     public void preDirtyProcessingFor(final Persistable pojo) {
-        withLogging(pojo, new Runnable() {
+        new Runnable() {
             @Override
             public void run() {
                 ObjectAdapter adapter = getAdapterFor(pojo);
@@ -1463,7 +1463,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
                 ensureRootObject(pojo);
             }
-        });
+        }.run();
     }
 
     private <T> T withLogging(Persistable pojo, Callable<T> runnable) {
@@ -1481,18 +1481,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         }
     }
 
-    private void withLogging(Persistable pojo, final Runnable runnable) {
-        withLogging(pojo, new Callable<Void>() {
-
-            @Override
-            public Void call() throws Exception {
-                runnable.run();
-                return null;
-            }
-
-        });
-    }
-
     private String logString(LoggingLocation location, Persistable pojo) {
         final ObjectAdapter adapter = getAdapterFor(pojo);
         // initial spaces just to look better in log when wrapped by IsisLifecycleListener...


[23/23] isis git commit: ISIS-1194: removing duplication between ServicesInjector interface and DomainObjectServices interface.

Posted by da...@apache.org.
ISIS-1194: removing duplication between ServicesInjector interface and DomainObjectServices interface.


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

Branch: refs/heads/ISIS-1194
Commit: 3ca02b28076a4844ea793fa39878f457c93f0e84
Parents: af2375b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Sep 14 07:34:46 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:29 2015 +0100

----------------------------------------------------------------------
 .../runtimecontext/DomainObjectServices.java    | 10 ---------
 .../noruntime/RuntimeContextNoRuntime.java      | 16 --------------
 .../container/DomainObjectContainerDefault.java | 17 ++++++++++++---
 .../internal/RuntimeContextFromSession.java     | 15 -------------
 .../system/persistence/PersistenceSession.java  | 22 +-------------------
 5 files changed, 15 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3ca02b28/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
index 5041de2..88195f4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/DomainObjectServices.java
@@ -42,16 +42,6 @@ public interface DomainObjectServices extends Injectable {
 
 
     // ///////////////////////////////////////////
-    // services
-    // ///////////////////////////////////////////
-
-    void injectServicesInto(Object domainObject);
-
-    <T> T lookupService(Class<T> service);
-
-    <T> Iterable<T> lookupServices(Class<T> service);
-
-    // ///////////////////////////////////////////
     // retrieve
     // ///////////////////////////////////////////
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3ca02b28/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index bc1c814..5402e09 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -240,22 +240,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
             public String getProperty(final String name) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
-
-            @Override
-            public void injectServicesInto(Object domainObject) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public <T> T lookupService(final Class<T> service) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public <T> Iterable<T> lookupServices(final Class<T> service) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
         };
         localizationProvider = new LocalizationProviderAbstract() {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3ca02b28/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index 33d8aa6..df8eadf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -69,6 +69,8 @@ import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.services.container.query.QueryFindByPattern;
 import org.apache.isis.core.metamodel.services.container.query.QueryFindByTitle;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -79,6 +81,7 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
 public class DomainObjectContainerDefault
         implements DomainObjectContainer, QuerySubmitterAware, DomainObjectServicesAware,
         ObjectPersistorAware, SpecificationLoaderAware, AuthenticationSessionProviderAware, AdapterManagerAware,
+        ServicesInjectorAware,
         LocalizationProviderAware, ExceptionRecognizer {
 
     //region > titleOf
@@ -208,20 +211,20 @@ public class DomainObjectContainerDefault
     @Programmatic
     @Override
     public <T> T injectServicesInto(T domainObject) {
-        getDomainObjectServices().injectServicesInto(unwrapped(domainObject));
+        servicesInjector.injectServicesInto(unwrapped(domainObject));
         return domainObject;
     }
 
     @Programmatic
     @Override
     public <T> T lookupService(final Class<T> service) {
-        return getDomainObjectServices().lookupService(service);
+        return servicesInjector.lookupService(service);
     }
 
     @Programmatic
     @Override
     public <T> Iterable<T> lookupServices(final Class<T> service) {
-        return getDomainObjectServices().lookupServices(service);
+        return servicesInjector.lookupServices(service);
     }
 
     //endregion
@@ -751,6 +754,7 @@ public class DomainObjectContainerDefault
     private AuthenticationSessionProvider authenticationSessionProvider;
     private AdapterManager adapterManager;
     private LocalizationProvider localizationProvider;
+    private ServicesInjector servicesInjector;
 
     protected QuerySubmitter getQuerySubmitter() {
         return querySubmitter;
@@ -816,6 +820,13 @@ public class DomainObjectContainerDefault
     public void setLocalizationProvider(final LocalizationProvider localizationProvider) {
         this.localizationProvider = localizationProvider;
     }
+
+    @Override
+    public void setServicesInjector(final ServicesInjector servicesInjector) {
+        this.servicesInjector = servicesInjector;
+    }
+
+
     //endregion
 
     //region > service dependencies

http://git-wip-us.apache.org/repos/asf/isis/blob/3ca02b28/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index b1d599c..a568184 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -230,21 +230,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
                 return RuntimeContextFromSession.this.getPropertyNames();
             }
 
-            @Override
-            public void injectServicesInto(Object domainObject) {
-                getPersistenceSession().getServicesInjector().injectServicesInto(domainObject);
-            }
-
-            @Override
-            public <T> T lookupService(final Class<T> service) {
-                return getPersistenceSession().getServicesInjector().lookupService(service);
-            }
-
-            @Override
-            public <T> Iterable<T> lookupServices(final Class<T> service) {
-                return getPersistenceSession().getServicesInjector().lookupServices(service);
-            }
-
         };
         this.querySubmitter = new QuerySubmitterAbstract() {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3ca02b28/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 304d5ff..2ee67ab 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
@@ -1303,14 +1303,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
     // endregion
 
-    //region > ServicesInjector delegate methods
-
-    public void injectServicesInto(final Object domainObject) {
-        servicesInjector.injectInto(domainObject);
-    }
-
-    //endregion
-
     //region > TransactionManager delegate methods
     protected IsisTransaction getCurrentTransaction() {
         return transactionManager.getTransaction();
@@ -1333,7 +1325,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
         // need to do eagerly, because (if a viewModel then) a
         // viewModel's #viewModelMemento might need to use services
-        injectServicesInto(pojo);
+        servicesInjector.injectInto(pojo);
 
         final Version datastoreVersion = getVersionIfAny(pc);
 
@@ -1580,18 +1572,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
 
 
-    @Override
-    public <T> T lookupService(final Class<T> service) {
-        return servicesInjector.lookupService(service);
-    }
-
-    @Override
-    public <T> Iterable<T> lookupServices(final Class<T> service) {
-        return servicesInjector.lookupServices(service);
-    }
-
-
-
 
     //endregion
 


[02/23] isis git commit: ISIS-1195: update how-to for domain services

Posted by da...@apache.org.
ISIS-1195: update how-to for domain services


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

Branch: refs/heads/ISIS-1194
Commit: 620bc32be0bc0a6681bfab9802845067698a13c5
Parents: a549b45
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Sep 10 23:55:26 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:35:41 2015 +0100

----------------------------------------------------------------------
 .../_rg_classes_AppManifest-bootstrapping.adoc  |   3 +-
 .../guides/_ug_how-tos_domain-services.adoc     | 258 +++++++++++++++----
 2 files changed, 205 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/620bc32b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
index bb1f850..756576c 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
@@ -71,7 +71,8 @@ public List<Class<?>> getModules() {
             org.isisaddons.module.docx.DocxModule.class,
             org.isisaddons.module.publishing.PublishingModule.class,
             org.isisaddons.module.sessionlogger.SessionLoggerModule.class,
-            org.isisaddons.module.settings.SettingsModule.class
+            org.isisaddons.module.settings.SettingsModule.class,
+            org.isisaddons.wicket.gmap3.cpt.service.Gmap3ServiceModule.class
     );
 }
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/620bc32b/adocs/documentation/src/main/asciidoc/guides/_ug_how-tos_domain-services.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_ug_how-tos_domain-services.adoc b/adocs/documentation/src/main/asciidoc/guides/_ug_how-tos_domain-services.adoc
index 8c4015c..bfc9e30 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_ug_how-tos_domain-services.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_ug_how-tos_domain-services.adoc
@@ -7,134 +7,284 @@
 
 
 
+In Apache Isis domain services have several responsibilities:
+
+- to expose actions to be rendered in the menu
+- to provide actions that are rendered as contributed actions/properties/collections on the contributee domain object
+- they act as subscribers to the event bus
+- they act as repositories (find existing objects) or as factories (create new objects)
+- they provide other services (eg performing calculations, attach a barcode, send an email etc).
+- to implement an SPI of the framework, most notably cross-cutting concerns such as security, command profiling, auditing and publishing.
+
 It's worth extending the xref:ug.adoc#_ug_core-concepts_philosophy_hexagonal-architecture[Hexagonal Architecture] to show where domain services -- and in particular the domain services provided by link:http://www.isisaddons.org[Isis Addons] (non-ASF) -- fit in:
 
 .The hexagonal architecture with Isis addons
 image::{_imagesdir}how-tos/domain-services/hexagonal-architecture-addons.png[width="700px"]
 
-Here, we can see that the addons provide services both to the Apache Isis framework (for example security, command and auditing) and also - by way of dependency injection - to the domain objects (eg tags, excel, settings). Of course, you can also write your own domain services as well, for example to interface with some external CMS system, say.
+The (non-ASF) link:http://isisaddons.org[Isis Addons] are a good source of domain services, providing SPI implementations of the common cross-cutting concerns, and also a number of APIs for domain objects to invoke (eg tags, excel, settings).  Of course, you can also write your own domain services as well, for example to interface with some external CMS system, say.
 
 The Apache Isis framework also provides numerous in-built domain services.  These are catalogued in the reference guide, see xref:rg.adoc#_rg_services-api[here] and xref:rg.adoc#_rg_services-spi[here].
 
 
 
+[[_ug_how-tos_domain-services_organizing-services]]
+== Organizing Services
 
+In larger applications we have found it worthwhile to ensure that our domain services only act aligned with these responsibilities, employing a naming convention so that it is clear what the responsibilities of each domain service is.
 
-== Scoped services
+The application provides the `@DomainService(nature=...)` annotation that helps distinguish some of these responsibilities:
 
-By default all domain services are considered to be singletons, and thread-safe.
+- `VIEW` indicates that the actions should appear both on the menu and also be used as contributions
+- `VIEW_MENU_ONLY` indicates that the actions should appear on the menu
+- `VIEW_CONTRIBUTED_ONLY` indicates that the actions should appear on the menu
+- `DOMAIN` indicates that the actions are for other domain objects to invoke (either directly or indirectly through the event bus), but in any case should not be rendered at all in the UI
 
-Sometimes though a service's lifetime is applicable only to a single request; in other words it is request-scoped.
+Pulling all the above together, here are our suggestions as to how you should organize your domain services.
+
+
+=== Factory and Repository
+
+The factory/repository uses an injected `DomainObjectContainer` to both instantiate new objects and to query the database for existing objects of a given entity type.  It is not visible in UI, rather other services delegate to it.
+
+We suggest naming such classes `XxxRepository`, eg:
 
-The CDI annotation xref:rg.adoc#_rg_annotations_manpage-RequestScoped[`@javax.enterprise.context.RequestScoped`] is used to indicate this fact:
 
 [source,java]
 ----
-@javax.enterprise.context.RequestScoped
-public class MyService extends AbstractService {
-    ...
+@DomainService(
+    nature=NatureOfService.DOMAIN                               // <1>
+)
+public CustomerRepository {
+    public List<Customer> findCustomerBy...(...) {
+        return allMatches(...);
+    }
+    public Customer newCustomer(...) {
+        Customer Customer = container.newTransientInstance(Customer.class);
+        ...
+        persistIfNotAlready(Customer);
+        return Customer;
+    }
+    public List<Customer> allCustomers() {
+        return container.allInstances(Customer.class);
+    }
+    @Inject
+    DomainObjectContainer container;
 }
 ----
+<1> interacted with only programmatically by other objects in the domain layer.
 
-The framework provides a number of request-scoped services, include a scratchpad service, query results caching, and support for co-ordinating bulk actions.  See xref:rg.adoc#_rg_services-api[here] and xref:rg.adoc#_rg_services-spi[here] for further details.
+There is no need to annotate the actions; they are implicitly hidden because of the domain service's nature.
 
 
 
+=== Menu
 
-== Registering domain services
+Menu services provide actions to be rendered on the menu.
 
+For the Wicket viewer, each service's actions appear as a collection of menu items of a named menu, and this menu is on one of the three menu bars provided by the Wicket viewer.  It is possible for more than one menu service's actions to appear on the same menu; a separator is shown between each.
 
-NOTE: TODO - discuss @DomainService if `isis.services-installer=annotation-and-configuration`; how to override these defaults by explicit registration
+For the Restful Objects viewer, all menu services are shown in the services representation.
 
-Domain services (which includes repositories and factories) can be registered in the `isis.properties` configuration file, under `isis.services` key (a comma-separated list):
+We suggest naming such classes `XxxMenu`, eg:
 
-For example:
 
-[source,ini]
+[source,java]
 ----
-isis.services = com.mycompany.myapp.employee.Employees\,
-                com.mycompany.myapp.claim.Claims\,
-                ...
+@DomainService(
+    nature = NatureOfService.VIEW_MENU_ONLY                     // <1>
+)
+@DomainServiceLayout(
+        named = "Customers",                                    // <2>
+        menuBar = DomainServiceLayout.MenuBar.PRIMARY,
+        menuOrder = "10"
+)
+public class CustomerMenu {
+    @Action(
+            semantics = SemanticsOf.SAFE
+    )
+    @MemberOrder( sequence = "1" )
+    public List<Customer> findCustomerBy...(...) {
+        return CustomerRepository.findCustomerBy(...);          // <3>
+    }
+
+    @Action(
+            semantics = SemanticsOf.NON_IDEMPOTENT
+    )
+    @MemberOrder( sequence = "3" )
+    public Customer newCustomer(...) {
+        return CustomerRepository.newCustomer(...);
+    }
+
+    @Action(
+            semantics = SemanticsOf.SAFE,
+            restrictTo = RestrictTo.PROTOTYPING
+    )
+    @MemberOrder( sequence = "99" )
+    public List<Customer> allCustomers() {
+        return CustomerRepository.allBankMandates();
+    }
+
+    @Inject
+    protected CustomerRepository customerRepository;
+}
 ----
+<1> the service's actions should be rendered as menu items
+<2> specifies the menu name.  All services with the same menu name will be displayed on the same menu, with separators between
+<3> delegates to an injected repository.
 
-This will then result in the framework instantiating a single instance of each of the services listed.
+Not every action on the repository need to be delegated to of course (the above example does but only because it is very simple).
 
-If all services reside under a common package, then the `isis.services.prefix` can specify this prefix:
+[TIP]
+====
+Note also that while there's nothing to stop `VIEW_MENU` domain services being injected into other domain objects and interacted with programmatically, we recommend against it.  Instead, inject the underlying repository.  If there is additional business logic, then consider introducing a further `DOMAIN`-scoped service and call that instead.
+====
 
-[source,ini]
+
+
+=== Contributions
+
+Services can contribute either actions, properties or collections, based on the type of their parameters.
+
+We suggest naming such classes `XxxContributions`, eg:
+
+[source,java]
 ----
-isis.services.prefix = com.mycompany.myapp
-isis.services = employee.Employees,\
-                claim.Claims,\
-                ...
+@DomainService(
+    nature=NatureOfService.VIEW_CONTRIBUTIONS_ONLY              // <1>
+)
+@DomainServiceLayout(
+    menuOrder="10",
+    name="...",
+}
+public OrderContributions {
+    @Action(semantics=SemanticsOf.SAFE)
+    @ActionLayout(contributed=Contributed.AS_ASSOCIATION)       // <2>
+    @CollectionLayout(render=RenderType.EAGERLY)
+    public List<Order> orders(Customer customer) {              // <3>
+        return container.allMatches(...);
+    }
+
+    @Inject
+    CustomerRepository customerRepository;
+}
 ----
+<1> the service's actions should be contributed to the entities of the parameters of those actions
+<2> contributed as an association, in particular as a collection because returns a `List<T>`.
+<3> Only actions with a single argument can be contributed as associations
 
-This is quite rare, however; you will often want to use default implementations of domain services that are provided by the framework and so will not reside under this prefix.
+More information about contributions can be found xref:ug.adoc#_ug_how-tos_contributed-members[here].
 
-Examples of framework-provided services (as defined in the applib) include clock, auditing, publishing, exception handling, view model support, snapshots/mementos, and user/application settings management; see the xref:rg.adoc#_rg_services-api[here] and _rg_services-spi[here] for further details.
 
+=== Event Subscribers
 
+Event subscribers can both veto interactions (hiding members, disabling members or validating changes), or can react to interactions (eg action invocation or property edit).
 
+We suggest naming such classes `XxxSubscriptions`, eg:
+
+[source,java]
+----
+@DomainService(
+    nature=NatureOfService.DOMAIN                       // <1>
+)
+@DomainServiceLayout(
+    menuOrder="10",
+    name="...",
+}
+public CustomerOrderSubscriptions {
+    @com.google.common.eventbus.Subscribe
+    public void on(final Customer.DeletedEvent ev) {
+        Customer customer = ev.getSource();
+        orderRepository.delete(customer);
+    }
+    @Inject
+    OrderRepository orderRepository;
+}
+----
+<1> subscriptions do not appear in the UI at all, so should use the domain nature of service
 
 
-== Contributions
 
-NOTE: TODO - just xref xref:ug.adoc#_ug_how-tos_contributed-members[contributed members] section.
+== Prototyping
 
+While for long-term maintainability we do recommend the naming conventions described xref:ug.adoc#_ug_how-tos_domain-services_organizing-services[above], you can get away with far fewer services when just prototyping a domain.
 
+If the domain service nature is not specified (or is left to its default, `VIEW`), then the service's actions will
+appear in the UI both as menu items _and_ as contributions (and the service can of course be injected into other domain objects for programmatic invocation).
 
+Later on it is easy enough to refactor the code to tease apart the different responsibilities.
 
 
 
-== Menu items
 
-NOTE: TODO - update to new annotations, including @DomainService(nature=...)
+== Scoped services
 
+By default all domain services are considered to be singletons, and thread-safe.
 
-By default every action of a service (by which we also mean repositories and factories) will be rendered in the viewer, eg as a menu item for that service menu. This behaviour can be suppressed by annotating the action using `@org.apache.isis.applib.annotations.NotInServiceMenu`.
+Sometimes though a service's lifetime is applicable only to a single request; in other words it is request-scoped.
 
-For example:
+The CDI annotation xref:rg.adoc#_rg_annotations_manpage-RequestScoped[`@javax.enterprise.context.RequestScoped`] is used to indicate this fact:
 
 [source,java]
 ----
-public interface Library {
-    @NotInServiceMenu
-    public Loan borrow(Loanable l, Borrower b);
+@javax.enterprise.context.RequestScoped
+public class MyService extends AbstractService {
+    ...
 }
 ----
 
-Note that an action annotated as being `@NotInServiceMenu` will still be contributed. If an action should neither be contributed nor appear in service menu items, then simply annotate it as `@Hidden`.
+The framework provides a number of request-scoped services, include a scratchpad service, query results caching, and support for co-ordinating bulk actions.  See xref:rg.adoc#_rg_services-api[here] and xref:rg.adoc#_rg_services-spi[here] for further details.
 
-Alternatively, this can be performed using a supporting method:
 
-[source,java]
+
+
+== Registering domain services
+
+The easiest way to register domain services is using xref:rg.adoc#_rg_classes_AppManifest-bootstrapping[`AppManifest`] to specify the modules
+which contain xref:rg.adoc#_rg_annotations_manpage-DomainService[`@DomainService`]-annotated classes.
+
+For example:
+
+[source,ini]
 ----
-public class LibraryImpl implements Library {
-    public Loan borrow(Loanable l, Borrower b) { ... }
-    public boolean notInServiceMenuBorrow() { ... }
+public class MyAppManifest implements AppManifest {
+    public List<Class<?>> getModules() {
+        return Arrays.asList(
+                ToDoAppDomainModule.class,
+                ToDoAppFixtureModule.class,
+                ToDoAppAppModule.class,
+                org.isisaddons.module.audit.AuditModule.class);
+    }
+    ...
 }
 ----
 
+will load all services in the packages underneath the four modules listed.
 
+An alternative (older) mechanism is to registered domain services in the `isis.properties` configuration file, under `isis.services` key (a comma-separated list); for example:
 
+[source,ini]
+----
+isis.services = com.mycompany.myapp.employee.Employees\,
+                com.mycompany.myapp.claim.Claims\,
+                ...
+----
 
-== Menus
-
-NOTE: TODO - update to new annotations, including @DomainService(nature=...)
-
-If none of the service menu items should appear, then the service itself should be annotated as `@Hidden`.
+This will then result in the framework instantiating a single instance of each of the services listed.
 
-For example:
+If all services reside under a common package, then the `isis.services.prefix` can specify this prefix:
 
-[source,java]
+[source,ini]
 ----
-@Hidden
-public interface EmailService {
-    public void sendEmail(String to, String from, String subject, String body);
-    public void forwardEmail(String to, String from, String subject, String body);
-}
+isis.services.prefix = com.mycompany.myapp
+isis.services = employee.Employees,\
+                claim.Claims,\
+                ...
 ----
 
+This is quite rare, however; you will often want to use default implementations of domain services that are provided by the framework and so will not reside under this prefix.
+
+Examples of framework-provided services (as defined in the applib) include clock, auditing, publishing, exception handling, view model support, snapshots/mementos, and user/application settings management; see the xref:rg.adoc#_rg_services-api[here] and _rg_services-spi[here] for further details.
+
 
 
 
@@ -156,9 +306,7 @@ Shutdown is similar; the framework will call any method annotated with xref:rg.a
 
 
 
-
 == The getId() method
 
 Optionally, a service may provide a xref:rg.adoc#_rg_methods_reserved_manpage-getId[`getId()`] method.  This method returns a logical identifier for a service, independent of its implementation.
 
-