Repository: isis
Updated Branches:
  refs/heads/master 11c6dcd37 -> 8b7267e60


ISIS-939: simplified PersistenceMechanismInstallerAbstract and its subclasses, 
also PersistenceSessionFactoryDelegating, PersistenceSessionFactoryDelegate.

* Replaced PersistenceSessionFactoryDelegate#createPersistenceSession with 
#createObjectStore (other common functionality moved to 
PersistenceSessionFactoryDelegating).
* Don't pass ObjectAdapterFactory, AdapaterManagerSpi, OidGenerator into 
PersistenceSession; instead it can new these up (there is no variation in 
implementation nor state held in these components)
* Removed IsisObjectStoreLogger, IsisObjectStoreDelegating.


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

Branch: refs/heads/master
Commit: 46dc3a48c1ef8bb9e02c1f4c971b6040a83fc5fa
Parents: 11c6dcd
Author: Dan Haywood <[email protected]>
Authored: Sat Nov 1 12:05:53 2014 +0000
Committer: Dan Haywood <[email protected]>
Committed: Thu Nov 6 16:18:54 2014 +0000

----------------------------------------------------------------------
 .../InMemoryPersistenceMechanismInstaller.java  |   6 +-
 .../PersistenceMechanismInstallerAbstract.java  | 167 +-----------
 .../PersistenceSessionFactoryDelegate.java      |  33 +--
 .../PersistenceSessionFactoryDelegating.java    |  69 +++--
 .../persistence/adapter/PojoAdapterFactory.java |   4 +-
 .../objectstore/IsisObjectStoreDelegating.java  | 194 --------------
 .../objectstore/IsisObjectStoreLogger.java      | 205 --------------
 .../system/persistence/PersistenceSession.java  |  38 +--
 .../persistence/PersistenceSessionFactory.java  |   5 +-
 .../jdo/datanucleus/DataNucleusObjectStore.java |   7 +-
 ...ataNucleusPersistenceMechanismInstaller.java |  61 ++---
 .../PersistenceSessionObjectStoreTest.java      | 268 -------------------
 .../persistence/PersistenceSessionTest.java     | 268 +++++++++++++++++++
 13 files changed, 377 insertions(+), 948 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryPersistenceMechanismInstaller.java
 
b/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryPersistenceMechanismInstaller.java
index 2f0acc2..293d557 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryPersistenceMechanismInstaller.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryPersistenceMechanismInstaller.java
@@ -20,12 +20,9 @@
 package org.apache.isis.core.objectstore;
 
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import 
org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstallerAbstract;
 import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.core.runtime.system.persistence.AdapterManagerSpi;
-import org.apache.isis.core.runtime.system.persistence.ObjectFactory;
 import 
org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 
 /**
@@ -56,7 +53,8 @@ public class InMemoryPersistenceMechanismInstaller extends 
PersistenceMechanismI
      * Hook method to return {@link ObjectStoreSpi}.
      */
     @Override
-    protected ObjectStoreSpi createObjectStore(final IsisConfiguration 
configuration, final ObjectAdapterFactory adapterFactory, final 
AdapterManagerSpi adapterManager) {
+    public ObjectStoreSpi createObjectStore(
+            final IsisConfiguration configuration) {
         return new InMemoryObjectStore();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
index e702e36..75e6fc4 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
@@ -20,128 +20,42 @@
 package org.apache.isis.core.runtime.installerregistry.installerapi;
 
 import java.util.List;
-import java.util.Properties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.config.InstallerAbstract;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
-import org.apache.isis.core.runtime.installerregistry.InstallerLookupAware;
 import 
org.apache.isis.core.runtime.persistence.PersistenceSessionFactoryDelegating;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapterFactory;
-import 
org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
-import org.apache.isis.core.runtime.persistence.adaptermanager.PojoRecreator;
-import 
org.apache.isis.core.runtime.persistence.adaptermanager.PojoRecreatorUnified;
-import 
org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
-import 
org.apache.isis.core.runtime.persistence.objectstore.IsisObjectStoreLogger;
-import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.*;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
-import 
org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInjector;
-
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
-import static org.hamcrest.CoreMatchers.*;
+import org.apache.isis.core.runtime.system.persistence.ObjectFactory;
+import 
org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 
 /**
  * An abstract implementation of {@link PersistenceMechanismInstaller} that 
will
  * lookup the {@link ObjectAdapterFactory} and {@link ObjectFactory} from the
  * supplied {@link IsisConfiguration}.
  */
-public abstract class PersistenceMechanismInstallerAbstract extends 
InstallerAbstract implements PersistenceMechanismInstaller, 
InstallerLookupAware {
-
-
-    private static final String LOGGING_PROPERTY = 
org.apache.isis.core.runtime.logging.Log4jLogger.PROPERTY_ROOT + 
"persistenceSession";
-    private static final Logger LOG = 
LoggerFactory.getLogger(PersistenceMechanismInstallerAbstract.class);
-
-    private SystemDependencyInjector installerLookup;
+public abstract class PersistenceMechanismInstallerAbstract extends 
InstallerAbstract implements PersistenceMechanismInstaller {
 
     public PersistenceMechanismInstallerAbstract(final String name) {
         super(PersistenceMechanismInstaller.TYPE, name);
     }
 
-    /**
-     * For subclasses that need to specify a different type.
-     */
-    public PersistenceMechanismInstallerAbstract(final String type, final 
String name) {
-        super(type, name);
-    }
-
-    
     //////////////////////////////////////////////////////////////////////
     // createPersistenceSessionFactory
     //////////////////////////////////////////////////////////////////////
 
+    //region > createPersistenceSessionFactory 
+    
     @Override
     public PersistenceSessionFactory createPersistenceSessionFactory(final 
DeploymentType deploymentType) {
         return new PersistenceSessionFactoryDelegating(deploymentType, 
getConfiguration(), this);
     }
 
-
-    //////////////////////////////////////////////////////////////////////
-    // createPersistenceSession
-    //////////////////////////////////////////////////////////////////////
-
-
-    /**
-     * Creates a {@link PersistenceSession} with internal (thread-safe) 
components obtained from the provided {@link PersistenceSessionFactory}.
-     * 
-     * <p>
-     * Typically should not be overridden.
-     */
-    @Override
-    public PersistenceSession createPersistenceSession(final 
PersistenceSessionFactory persistenceSessionFactory) {
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("installing " + this.getClass().getName());
-        }
-
-        ObjectAdapterFactory adapterFactory = 
persistenceSessionFactory.getAdapterFactory();
-        PojoRecreator pojoRecreator = new 
PojoRecreatorUnified(getConfiguration());
-        ServicesInjectorSpi servicesInjector = 
persistenceSessionFactory.getServicesInjector();
-        
-        final AdapterManagerDefault adapterManager = new 
AdapterManagerDefault(pojoRecreator);
-        
-        ObjectStoreSpi objectStore = createObjectStore(getConfiguration(), 
adapterFactory, adapterManager);
-        
-        ensureThatArg(objectStore, is(not(nullValue())));
-        
-        if (getConfiguration().getBoolean(LOGGING_PROPERTY, false)) {
-            final String level = getConfiguration().getString(LOGGING_PROPERTY 
+ ".level", "debug");
-            objectStore = new IsisObjectStoreLogger(objectStore, level);
-        }
-        
-        final PersistenceSession persistenceSession = 
-                new PersistenceSession(persistenceSessionFactory, 
adapterFactory, servicesInjector, adapterManager, objectStore, 
getConfiguration());
-
-        final IsisTransactionManager transactionManager = new 
IsisTransactionManager(persistenceSession, objectStore, servicesInjector);
-        
-        persistenceSession.setDirtiableSupport(true);
-        persistenceSession.setTransactionManager(transactionManager);
-        
-        return persistenceSession;
-    }
-
-
-
-    // ///////////////////////////////////////////
-    // Mandatory hook methods
-    // ///////////////////////////////////////////
-
-    /**
-     * Hook method to return {@link ObjectStoreSpi}.
-     */
-    protected abstract ObjectStoreSpi createObjectStore(IsisConfiguration 
configuration, ObjectAdapterFactory adapterFactory, AdapterManagerSpi 
adapterManager);
-    
+    //endregion
 
     // ///////////////////////////////////////////
     // Optional hook methods
@@ -173,75 +87,6 @@ public abstract class PersistenceMechanismInstallerAbstract 
extends InstallerAbs
         // no-op
     }
 
-    /**
-     * Hook method to allow subclasses to specify a different implementation of
-     * {@link ObjectAdapterFactory}.
-     * 
-     * <p>
-     * By default, returns {@link PojoAdapterFactory};
-     */
-    public ObjectAdapterFactory createAdapterFactory(final IsisConfiguration 
configuration) {
-        return new PojoAdapterFactory();
-    }
-    
-
-    /**
-     * Hook method to allow subclasses to specify a different implementation of
-     * {@link ServicesInjectorSpi}
-     * 
-     * <p>
-     * By default, returns {@link ServicesInjectorDefault};
-     */
-    public ServicesInjectorSpi createServicesInjector(final IsisConfiguration 
configuration) {
-        return new ServicesInjectorDefault();
-    }
-
-
-    // ///////////////////////////////////////////
-    // Non overridable.
-    // ///////////////////////////////////////////
-
-    /**
-     * Returns a {@link RuntimeContext}, with all application-specific 
properties
-     * from the provided {@link IsisConfiguration} copied over.
-     */
-    public final RuntimeContext createRuntimeContext(final IsisConfiguration 
configuration) {
-        final RuntimeContextFromSession runtimeContext = new 
RuntimeContextFromSession();
-        final Properties properties = applicationPropertiesFrom(configuration);
-        runtimeContext.setProperties(properties);
-        return runtimeContext;
-    }
-
-    private static Properties applicationPropertiesFrom(final 
IsisConfiguration configuration) {
-        final Properties properties = new Properties();
-        final IsisConfiguration applicationConfiguration = 
configuration.getProperties("application");
-        for (final String key : applicationConfiguration) {
-            final String value = applicationConfiguration.getString(key);
-            final String newKey = key.substring("application.".length());
-            properties.setProperty(newKey, value);
-        }
-        return properties;
-    }
-
-
-    // /////////////////////////////////////////////////////
-    // Dependencies (from setters)
-    // /////////////////////////////////////////////////////
-
-    /**
-     * By virtue of being {@link InstallerLookupAware}.
-     */
-    @Override
-    public void setInstallerLookup(final InstallerLookup installerLookup) {
-        this.installerLookup = installerLookup;
-    }
-
-    /**
-     * @see #setInstallerLookup(InstallerLookup)
-     */
-    protected SystemDependencyInjector getInstallerLookup() {
-        return installerLookup;
-    }
 
     // /////////////////////////////////////////////////////
     // Dependencies (from context)

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegate.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegate.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegate.java
index 9da2585..59a6010 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegate.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegate.java
@@ -21,43 +21,16 @@ package org.apache.isis.core.runtime.persistence;
 
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationBuilderAware;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import 
org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 
 /**
- * Creates a {@link PersistenceSession} on behalf of a
+ * Creates an {@link 
org.apache.isis.core.runtime.system.persistence.ObjectStore} on behalf of a
  * {@link PersistenceSessionFactory}.
  */
 public interface PersistenceSessionFactoryDelegate extends 
IsisConfigurationBuilderAware, MetaModelRefiner {
 
+    ObjectStoreSpi createObjectStore(final IsisConfiguration configuration);
 
-    ///////////////////////////////////////////////////////////////////////////
-    // singleton threadsafe components created during init
-    ///////////////////////////////////////////////////////////////////////////
-    
-    ObjectAdapterFactory createAdapterFactory(IsisConfiguration configuration);
-
-    ServicesInjectorSpi createServicesInjector(IsisConfiguration 
configuration);
-
-    RuntimeContext createRuntimeContext(IsisConfiguration configuration);
-
-    
-    ///////////////////////////////////////////////////////////////////////////
-    // created for each session
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * As per {@link PersistenceSessionFactory#createPersistenceSession()}, but
-     * passing a {@link PersistenceSessionFactory} to act as the
-     * {@link PersistenceSession}'s
-     * {@link PersistenceSession#getPersistenceSessionFactory() owning 
factory}.
-     */
-    PersistenceSession createPersistenceSession(PersistenceSessionFactory 
persistenceSessionFactory);
-
-    
-    
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
index c0902f7..69153f2 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
@@ -20,29 +20,38 @@
 package org.apache.isis.core.runtime.persistence;
 
 import java.util.List;
+import java.util.Properties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.fixtures.FixtureClock;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import 
org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
+import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import 
org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
 import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
 import static org.hamcrest.CoreMatchers.*;
 
 /**
  * Implementation that just delegates to a supplied
- * {@link PersistenceSessionFactory}.
+ * {@link PersistenceSessionFactoryDelegate}.
  */
 public class PersistenceSessionFactoryDelegating implements 
PersistenceSessionFactory, FixturesInstalledFlag {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(PersistenceSessionFactoryDelegating.class);
+
     private final DeploymentType deploymentType;
     private final IsisConfiguration configuration;
     private final PersistenceSessionFactoryDelegate 
persistenceSessionFactoryDelegate;
@@ -54,8 +63,7 @@ public class PersistenceSessionFactoryDelegating implements 
PersistenceSessionFa
 
     private Boolean fixturesInstalled;
 
-    private ObjectAdapterFactory adapterFactory;
-    private ServicesInjectorSpi servicesInjector;
+    private final ServicesInjectorSpi servicesInjector = new 
ServicesInjectorDefault();
     private RuntimeContext runtimeContext;
 
     public PersistenceSessionFactoryDelegating(
@@ -78,7 +86,25 @@ public class PersistenceSessionFactoryDelegating implements 
PersistenceSessionFa
 
     @Override
     public PersistenceSession createPersistenceSession() {
-        return 
persistenceSessionFactoryDelegate.createPersistenceSession(this);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("installing " + this.getClass().getName());
+        }
+
+        ServicesInjectorSpi servicesInjector = getServicesInjector();
+
+        final ObjectStoreSpi objectStore = 
persistenceSessionFactoryDelegate.createObjectStore(getConfiguration());
+
+        ensureThatArg(objectStore, is(not(nullValue())));
+
+        final PersistenceSession persistenceSession =new 
PersistenceSession(this, servicesInjector, objectStore, getConfiguration());
+
+        final IsisTransactionManager transactionManager = new 
IsisTransactionManager(persistenceSession, objectStore, servicesInjector);
+
+        persistenceSession.setDirtiableSupport(true);
+        persistenceSession.setTransactionManager(transactionManager);
+
+        return persistenceSession;
     }
 
     @Override
@@ -98,15 +124,7 @@ public class PersistenceSessionFactoryDelegating implements 
PersistenceSessionFa
             FixtureClock.initialize();
         }
 
-        adapterFactory = 
persistenceSessionFactoryDelegate.createAdapterFactory(getConfiguration());
-
-        ensureThatState(adapterFactory, is(not(nullValue())));
-
-        servicesInjector = 
persistenceSessionFactoryDelegate.createServicesInjector(getConfiguration());
-
-        ensureThatState(servicesInjector, is(not(nullValue())));
-
-        runtimeContext = 
persistenceSessionFactoryDelegate.createRuntimeContext(getConfiguration());
+        runtimeContext = createRuntimeContext(getConfiguration());
         ensureThatState(runtimeContext, is(not(nullValue())));
 
         // inject the specification loader etc.
@@ -123,6 +141,25 @@ public class PersistenceSessionFactoryDelegating 
implements PersistenceSessionFa
         servicesInjector.init();
     }
 
+    private RuntimeContext createRuntimeContext(final IsisConfiguration 
configuration) {
+        final RuntimeContextFromSession runtimeContext = new 
RuntimeContextFromSession();
+        final Properties properties = applicationPropertiesFrom(configuration);
+        runtimeContext.setProperties(properties);
+        return runtimeContext;
+    }
+
+    private static Properties applicationPropertiesFrom(final 
IsisConfiguration configuration) {
+        final Properties properties = new Properties();
+        final IsisConfiguration applicationConfiguration = 
configuration.getProperties("application");
+        for (final String key : applicationConfiguration) {
+            final String value = applicationConfiguration.getString(key);
+            final String newKey = key.substring("application.".length());
+            properties.setProperty(newKey, value);
+        }
+        return properties;
+    }
+
+
 
     @Override
     public final void shutdown() {
@@ -140,10 +177,6 @@ public class PersistenceSessionFactoryDelegating 
implements PersistenceSessionFa
     // Components (setup during init...)
     // //////////////////////////////////////////////////////
 
-    public ObjectAdapterFactory getAdapterFactory() {
-        return adapterFactory;
-    }
-    
     public ServicesInjectorSpi getServicesInjector() {
         return servicesInjector;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapterFactory.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapterFactory.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapterFactory.java
index 97ada74..319942d 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapterFactory.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapterFactory.java
@@ -30,12 +30,10 @@ import 
org.apache.isis.core.runtime.system.context.IsisContext;
 public class PojoAdapterFactory implements ObjectAdapterFactory {
 
     @Override
-    public PojoAdapter createAdapter(final Object pojo, final Oid oid, 
AdapterManager adapterManager) {
+    public PojoAdapter createAdapter(final Object pojo, final Oid oid, final 
AdapterManager adapterManager) {
         return new PojoAdapter(pojo, oid, getSpecificationLoader(), 
adapterManager, getLocalization(), getAuthenticationSession());
     }
 
-    
-    
     protected AuthenticationSession getAuthenticationSession() {
         return IsisContext.getAuthenticationSession();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreDelegating.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreDelegating.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreDelegating.java
deleted file mode 100644
index 02eb98d..0000000
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreDelegating.java
+++ /dev/null
@@ -1,194 +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.runtime.persistence.objectstore;
-
-import java.util.List;
-
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-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;
-import 
org.apache.isis.core.runtime.persistence.objectstore.transaction.SaveObjectCommand;
-import org.apache.isis.core.runtime.system.persistence.PersistenceQuery;
-
-/**
- * Implementation that simply delegates to underlying {@link ObjectStoreSpi}.
- * 
- * <p>
- * Useful for quickly writing decorating implementations.
- */
-public class IsisObjectStoreDelegating implements ObjectStoreSpi {
-
-    private final ObjectStoreSpi underlying;
-    private final String name;
-
-    public IsisObjectStoreDelegating(final ObjectStoreSpi underlying, final 
String name) {
-        this.underlying = underlying;
-        this.name = name;
-    }
-
-    // ////////////////////////////////////////////////
-    // name
-    // ////////////////////////////////////////////////
-
-    @Override
-    public String name() {
-        return name + "(" + underlying.name() + ")";
-    }
-
-    // ////////////////////////////////////////////////
-    // init, shutdown, reset, isInitialized
-    // ////////////////////////////////////////////////
-
-    @Override
-    public void open() {
-        underlying.open();
-    }
-
-    @Override
-    public void close() {
-        underlying.close();
-    }
-
-    @Override
-    public void reset() {
-        underlying.reset();
-    }
-
-    @Override
-    public boolean isFixturesInstalled() {
-        return underlying.isFixturesInstalled();
-    }
-
-    // ////////////////////////////////////////////////
-    // createXxxCommands
-    // ////////////////////////////////////////////////
-
-    @Override
-    public CreateObjectCommand createCreateObjectCommand(final ObjectAdapter 
object) {
-        return underlying.createCreateObjectCommand(object);
-    }
-
-    @Override
-    public DestroyObjectCommand createDestroyObjectCommand(final ObjectAdapter 
object) {
-        return underlying.createDestroyObjectCommand(object);
-    }
-
-    @Override
-    public SaveObjectCommand createSaveObjectCommand(final ObjectAdapter 
object) {
-        return underlying.createSaveObjectCommand(object);
-    }
-
-    // ////////////////////////////////////////////////
-    // execute
-    // ////////////////////////////////////////////////
-
-    @Override
-    public void execute(final List<PersistenceCommand> commands) {
-        underlying.execute(commands);
-    }
-
-    // ////////////////////////////////////////////////
-    // TransactionManagement
-    // ////////////////////////////////////////////////
-
-    @Override
-    public void startTransaction() {
-        underlying.startTransaction();
-    }
-
-    @Override
-    public void endTransaction() {
-        underlying.endTransaction();
-    }
-
-    @Override
-    public void abortTransaction() {
-        underlying.abortTransaction();
-    }
-
-    // ////////////////////////////////////////////////
-    // getObject, resolveImmediately, resolveField
-    // ////////////////////////////////////////////////
-
-    @Override
-    public ObjectAdapter loadInstanceAndAdapt(final TypedOid oid) {
-        return underlying.loadInstanceAndAdapt(oid);
-    }
-
-    @Override
-    public void resolveField(final ObjectAdapter object, final 
ObjectAssociation field) {
-        underlying.resolveField(object, field);
-    }
-
-    @Override
-    public void resolveImmediately(final ObjectAdapter object) {
-        underlying.resolveImmediately(object);
-    }
-
-    // ////////////////////////////////////////////////
-    // getInstances, hasInstances
-    // ////////////////////////////////////////////////
-
-    @Override
-    public List<ObjectAdapter> loadInstancesAndAdapt(final PersistenceQuery 
persistenceQuery) {
-        return underlying.loadInstancesAndAdapt(persistenceQuery);
-    }
-
-    @Override
-    public boolean hasInstances(final ObjectSpecification specification) {
-        return underlying.hasInstances(specification);
-    }
-
-    // ////////////////////////////////////////////////
-    // services
-    // ////////////////////////////////////////////////
-
-    @Override
-    public RootOid getOidForService(ObjectSpecification serviceSpecification) {
-        return underlying.getOidForService(serviceSpecification);
-    }
-
-    @Override
-    public void registerService(final RootOid rootOid) {
-        underlying.registerService(rootOid);
-    }
-
-    // ////////////////////////////////////////////////
-    // debug
-    // ////////////////////////////////////////////////
-
-    @Override
-    public void debugData(final DebugBuilder debug) {
-        underlying.debugData(debug);
-    }
-
-    @Override
-    public String debugTitle() {
-        return underlying.debugTitle();
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreLogger.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreLogger.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreLogger.java
deleted file mode 100644
index c619708..0000000
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/IsisObjectStoreLogger.java
+++ /dev/null
@@ -1,205 +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.runtime.persistence.objectstore;
-
-import java.util.List;
-
-import org.apache.isis.core.commons.config.IsisConfigurationException;
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.commons.factory.InstanceCreationException;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
-import org.apache.isis.core.runtime.persistence.ObjectPersistenceException;
-import org.apache.isis.core.runtime.persistence.UnsupportedFindException;
-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;
-import 
org.apache.isis.core.runtime.persistence.objectstore.transaction.SaveObjectCommand;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceQuery;
-
-public class IsisObjectStoreLogger extends Slf4jLogger implements 
ObjectStoreSpi {
-    
-    
-    private final ObjectStoreSpi underlying;
-
-    public IsisObjectStoreLogger(final ObjectStoreSpi decorated, final String 
level) {
-        super(level);
-        this.underlying = decorated;
-    }
-
-    public IsisObjectStoreLogger(final ObjectStoreSpi decorated) {
-        this.underlying = decorated;
-    }
-
-    @Override
-    public CreateObjectCommand createCreateObjectCommand(final ObjectAdapter 
object) {
-        log("create object " + object);
-        return underlying.createCreateObjectCommand(object);
-    }
-
-    @Override
-    public void registerService(final RootOid rootOid) {
-        log("registering service: " + rootOid.enString(getOidMarshaller()));
-        underlying.registerService(rootOid);
-    }
-
-    @Override
-    public DestroyObjectCommand createDestroyObjectCommand(final ObjectAdapter 
object) {
-        log("destroy object " + object);
-        return underlying.createDestroyObjectCommand(object);
-    }
-
-    @Override
-    public SaveObjectCommand createSaveObjectCommand(final ObjectAdapter 
object) {
-        log("save object " + object);
-        return underlying.createSaveObjectCommand(object);
-    }
-
-    @Override
-    public void debugData(final DebugBuilder debug) {
-        underlying.debugData(debug);
-    }
-
-    @Override
-    public String debugTitle() {
-        return underlying.debugTitle();
-    }
-
-    @Override
-    protected Class<?> getDecoratedClass() {
-        return underlying.getClass();
-    }
-
-    @Override
-    public List<ObjectAdapter> loadInstancesAndAdapt(final PersistenceQuery 
criteria) throws ObjectPersistenceException, UnsupportedFindException {
-        log("get instances matching " + criteria);
-        return underlying.loadInstancesAndAdapt(criteria);
-    }
-
-
-    @Override
-    public ObjectAdapter loadInstanceAndAdapt(final TypedOid oid) throws 
ObjectNotFoundException, ObjectPersistenceException {
-        final ObjectAdapter adapter = underlying.loadInstanceAndAdapt(oid);
-        log("get object for " + oid + " (of type '" + oid.getObjectSpecId() + 
"')", adapter.getObject());
-        return adapter;
-    }
-
-    @Override
-    public RootOid getOidForService(ObjectSpecification serviceSpec) {
-        final RootOid serviceOid = underlying.getOidForService(serviceSpec);
-        if(serviceOid != null) {
-            log("get OID for service: " + 
serviceOid.enString(getOidMarshaller()));
-        } else {
-            log("get OID for service: null (presumably in the process of being 
registered for '" + serviceSpec.getSpecId() + "')");
-        }
-        return serviceOid;
-    }
-
-    @Override
-    public boolean hasInstances(final ObjectSpecification specification) 
throws ObjectPersistenceException {
-        final boolean hasInstances = underlying.hasInstances(specification);
-        log("has instances of " + specification.getShortIdentifier(), "" + 
hasInstances);
-        return hasInstances;
-    }
-
-    @Override
-    public boolean isFixturesInstalled() {
-        final boolean isInitialized = underlying.isFixturesInstalled();
-        log("is initialized: " + isInitialized);
-        return isInitialized;
-    }
-
-    @Override
-    public void open() throws IsisConfigurationException, 
InstanceCreationException, ObjectPersistenceException {
-        log("opening " + name());
-        underlying.open();
-    }
-
-    @Override
-    public String name() {
-        return underlying.name();
-    }
-
-    @Override
-    public void reset() {
-        log("reset");
-        underlying.reset();
-    }
-
-    @Override
-    public void resolveField(final ObjectAdapter object, final 
ObjectAssociation field) throws ObjectPersistenceException {
-        log("resolve eagerly object in field " + field + " of " + object);
-        underlying.resolveField(object, field);
-    }
-
-    @Override
-    public void resolveImmediately(final ObjectAdapter object) throws 
ObjectPersistenceException {
-        log("resolve immediately: " + object);
-        underlying.resolveImmediately(object);
-    }
-
-    @Override
-    public void execute(final List<PersistenceCommand> commands) throws 
ObjectPersistenceException {
-        log("execute commands");
-        int i = 0;
-        for (final PersistenceCommand command : commands) {
-            log("  " + (i++) + " " + command);
-        }
-        underlying.execute(commands);
-    }
-
-    @Override
-    public void close() throws ObjectPersistenceException {
-        log("closing " + underlying);
-        underlying.close();
-    }
-
-    @Override
-    public void startTransaction() {
-        underlying.startTransaction();
-    }
-
-    @Override
-    public void endTransaction() {
-        underlying.endTransaction();
-    }
-
-    @Override
-    public void abortTransaction() {
-        underlying.abortTransaction();
-    }
-    
-    
-    /////////////////////////////////////////////
-    // Dependencies (from context)
-    /////////////////////////////////////////////
-    
-    protected OidMarshaller getOidMarshaller() {
-        return IsisContext.getOidMarshaller();
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/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 ffd13b6..cdd3a10 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
@@ -54,6 +54,9 @@ import org.apache.isis.core.metamodel.spec.*;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapterFactory;
+import 
org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
+import 
org.apache.isis.core.runtime.persistence.adaptermanager.PojoRecreatorUnified;
 import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import 
org.apache.isis.core.runtime.persistence.objectstore.algorithm.PersistAlgorithm;
 import 
org.apache.isis.core.runtime.persistence.objectstore.algorithm.PersistAlgorithmUnified;
@@ -104,43 +107,24 @@ public class PersistenceSession implements Persistor, 
EnlistedObjectDirtying, To
      */
     public PersistenceSession(
             final PersistenceSessionFactory persistenceSessionFactory,
-            final ObjectAdapterFactory adapterFactory,
             final ServicesInjectorSpi servicesInjector,
-            final AdapterManagerSpi adapterManager,
-            final ObjectStore objectStore,
-            final IsisConfiguration configuration) {
-
-        this(persistenceSessionFactory, adapterFactory, servicesInjector, new 
OidGenerator(new IdentifierGeneratorUnified(configuration)), adapterManager, 
objectStore, configuration);
-    }
-
-    /**
-     * Initialize the object store so that calls to this object store access
-     * persisted objects and persist changes to the object that are saved.
-     */
-    public PersistenceSession(
-            final PersistenceSessionFactory persistenceSessionFactory,
-            final ObjectAdapterFactory adapterFactory,
-            final ServicesInjectorSpi servicesInjector,
-            final OidGenerator oidGenerator,
-            final AdapterManagerSpi adapterManager,
             final ObjectStore objectStore,
             final IsisConfiguration configuration) {
 
         ensureThatArg(persistenceSessionFactory, is(not(nullValue())), 
"persistence session factory required");
-
-        ensureThatArg(adapterFactory, is(not(nullValue())), "adapter factory 
required");
         ensureThatArg(servicesInjector, is(not(nullValue())), "services 
injector required");
-        ensureThatArg(oidGenerator, is(not(nullValue())), "OID generator 
required");
-        ensureThatArg(adapterManager, is(not(nullValue())), "adapter manager 
required");
+        ensureThatArg(objectStore, is(not(nullValue())), "object store 
required");
 
         // owning, application scope
         this.persistenceSessionFactory = persistenceSessionFactory;
 
         // session scope
-        this.objectAdapterFactory = adapterFactory;
         this.servicesInjector = servicesInjector;
-        this.oidGenerator = oidGenerator;
-        this.adapterManager = adapterManager;
+
+        this.objectAdapterFactory = new PojoAdapterFactory();
+        this.oidGenerator = new OidGenerator(new 
IdentifierGeneratorUnified(configuration));
+        this.adapterManager = new AdapterManagerDefault(new 
PojoRecreatorUnified(configuration));
+        this.persistAlgorithm = new PersistAlgorithmUnified(configuration);
 
         setState(State.NOT_INITIALIZED);
 
@@ -148,10 +132,6 @@ public class PersistenceSession implements Persistor, 
EnlistedObjectDirtying, To
             LOG.debug("creating " + this);
         }
 
-        this.persistAlgorithm = new PersistAlgorithmUnified(configuration);
-
-        ensureThatArg(objectStore, is(not(nullValue())), "object store 
required");
-
         this.objectStore = objectStore;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
index 7c3e2bf..9ab3529 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
@@ -21,14 +21,12 @@ package org.apache.isis.core.runtime.system.persistence;
 
 import java.util.List;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import 
org.apache.isis.core.runtime.persistence.PersistenceSessionFactoryDelegate;
 import org.apache.isis.core.runtime.system.DeploymentType;
 
 /**
- * @see PersistenceSessionFactoryDelegate
+ * @see 
org.apache.isis.core.runtime.persistence.PersistenceSessionFactoryDelegate
  */
 public interface PersistenceSessionFactory extends MetaModelRefiner, 
ApplicationScopedComponent {
 
@@ -39,7 +37,6 @@ public interface PersistenceSessionFactory extends 
MetaModelRefiner, Application
     // Singleton threadsafe components
     // //////////////////////////////////////////////////////
 
-    ObjectAdapterFactory getAdapterFactory();
     ServicesInjectorSpi getServicesInjector();
 
     

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
 
b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
index 3c6d792..edccfa1 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
@@ -31,7 +31,6 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-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.config.ConfigurationConstants;
@@ -49,6 +48,7 @@ import 
org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 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.adapter.PojoAdapterFactory;
 import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import 
org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
 import 
org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
@@ -122,7 +122,10 @@ public class DataNucleusObjectStore implements 
ObjectStoreSpi {
     private TransactionMode transactionMode;
     
 
-    public DataNucleusObjectStore(ObjectAdapterFactory adapterFactory, 
DataNucleusApplicationComponents applicationComponents) {
+    public DataNucleusObjectStore(
+            final DataNucleusApplicationComponents applicationComponents) {
+
+        final ObjectAdapterFactory adapterFactory = new PojoAdapterFactory();
         ensureThatArg(adapterFactory, is(notNullValue()));
         ensureThatArg(applicationComponents, is(notNullValue()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
 
b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
index 9961265..adffadc 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
@@ -27,7 +27,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.components.Installer;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -35,7 +34,6 @@ import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorCom
 import 
org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstallerAbstract;
 import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.AdapterManagerSpi;
 import 
org.apache.isis.objectstore.jdo.metamodel.facets.object.auditable.AuditableAnnotationInJdoApplibFacetFactory;
 import 
org.apache.isis.objectstore.jdo.metamodel.facets.object.auditable.AuditableMarkerInterfaceInJdoApplibFacetFactory;
 import 
org.apache.isis.objectstore.jdo.metamodel.facets.object.datastoreidentity.JdoDatastoreIdentityAnnotationFacetFactory;
@@ -79,37 +77,42 @@ public class DataNucleusPersistenceMechanismInstaller 
extends PersistenceMechani
 
     private static final String ISIS_CONFIG_PREFIX = 
"isis.persistor.datanucleus.impl";
 
-    private DataNucleusApplicationComponents applicationComponents = null;
-
     public DataNucleusPersistenceMechanismInstaller() {
         super(NAME);
     }
 
 
-    ////////////////////////////////////////////////////////////////////////
-    // createObjectStore
-    ////////////////////////////////////////////////////////////////////////
-    
+    //region > createObjectStore
+
     @Override
-    protected ObjectStoreSpi createObjectStore(IsisConfiguration 
configuration, ObjectAdapterFactory adapterFactory, AdapterManagerSpi 
adapterManager) {
-        createDataNucleusApplicationComponentsIfRequired(configuration);
-        return new DataNucleusObjectStore(adapterFactory, 
applicationComponents);
+    public ObjectStoreSpi createObjectStore(final IsisConfiguration 
configuration) {
+        final DataNucleusApplicationComponents applicationComponents = 
createDataNucleusApplicationComponentsIfRequired(configuration);
+        return new DataNucleusObjectStore(applicationComponents);
     }
 
-    private void 
createDataNucleusApplicationComponentsIfRequired(IsisConfiguration 
configuration) {
-        // this is, perhaps doing more work than necessary...
-        // maybe retain the applicationComponents and just tell it to discard 
its PMF?
-        // (doubt will make much different in terms of the amount of time to 
process, though)
-        if(applicationComponents != null && !applicationComponents.isStale()) {
-            return;
+    //endregion
+
+    //region > createDataNucleusApplicationComponentsIfRequired
+    
+    private DataNucleusApplicationComponents applicationComponents = null;
+
+    private DataNucleusApplicationComponents 
createDataNucleusApplicationComponentsIfRequired(IsisConfiguration 
configuration) {
+
+        if (applicationComponents == null || applicationComponents.isStale()) {
+
+            // this is, perhaps doing more work than necessary...
+            // maybe retain the applicationComponents and just tell it to 
discard its PMF?
+            // (doubt will make much different in terms of the amount of time 
to process, though)
+
+            final IsisConfiguration dataNucleusConfig = 
configuration.createSubset(ISIS_CONFIG_PREFIX);
+            final Map<String, String> props = dataNucleusConfig.asMap();
+            addDataNucleusPropertiesIfRequired(props);
+
+            final Set<String> classesToBePersisted = 
catalogClassesToBePersisted(configuration, 
getSpecificationLoader().allSpecifications());
+            applicationComponents = new 
DataNucleusApplicationComponents(props, classesToBePersisted);
         }
-        
-        final IsisConfiguration dataNucleusConfig = 
configuration.createSubset(ISIS_CONFIG_PREFIX);
-        final Map<String, String> props = dataNucleusConfig.asMap();
-        addDataNucleusPropertiesIfRequired(props);
 
-        final Set<String> classesToBePersisted = 
catalogClassesToBePersisted(configuration, 
getSpecificationLoader().allSpecifications());
-        applicationComponents = new DataNucleusApplicationComponents(props, 
classesToBePersisted);
+        return applicationComponents;
     }
 
     private static Set<String> catalogClassesToBePersisted(final 
IsisConfiguration configuration, Collection<ObjectSpecification> objectSpecs) {
@@ -178,10 +181,9 @@ public class DataNucleusPersistenceMechanismInstaller 
extends PersistenceMechani
             props.put(key, value);
         }
     }
+    //endregion
 
-    ////////////////////////////////////////////////////////////////////////
-    // PersistenceSessionFactoryDelegate impl
-    ////////////////////////////////////////////////////////////////////////
+    //region > PersistenceSessionFactoryDelegate impl
 
 
     @Override
@@ -211,14 +213,13 @@ public class DataNucleusPersistenceMechanismInstaller 
extends PersistenceMechani
         metaModelValidator.add(new JdoMetaModelValidator());
     }
 
+    //endregion
 
+    //region > dependencies
 
-    ////////////////////////////////////////////////////////////////////////
-    // Dependencies
-    ////////////////////////////////////////////////////////////////////////
-    
     protected SpecificationLoaderSpi getSpecificationLoader() {
         return IsisContext.getSpecificationLoader();
     }
 
+    //endregion
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java
 
b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java
deleted file mode 100644
index 7b6ac68..0000000
--- 
a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java
+++ /dev/null
@@ -1,268 +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.runtime.persistence.objectstore;
-
-import java.util.Collections;
-import org.jmock.Expectations;
-import org.jmock.Sequence;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.apache.isis.applib.services.audit.AuditingService3;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.authentication.MessageBroker;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.matchers.IsisMatchers;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.app.IsisMetaModel;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
-import 
org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import 
org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapterFactory;
-import 
org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
-import 
org.apache.isis.core.runtime.persistence.adaptermanager.PojoRecreatorUnified;
-import 
org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
-import org.apache.isis.core.runtime.persistence.objectstore.transaction.*;
-import 
org.apache.isis.core.runtime.persistence.objectstore.transaction.PojoAdapterBuilder.Persistence;
-import org.apache.isis.core.runtime.system.persistence.*;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-
-public class PersistenceSessionObjectStoreTest {
-
-    @Rule
-    public JUnitRuleMockery2 context = 
JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    private ServicesInjectorDefault servicesInjector;
-    private AdapterManagerSpi adapterManager;
-    private ObjectAdapterFactory adapterFactory;
-    
-    
-    private PersistenceSession persistenceSession;
-    private IsisTransactionManager transactionManager;
-    
-    private ObjectAdapter persistentAdapter;
-    private PojoAdapter transientAdapter;
-    
-    @Mock
-    private PersistenceSessionFactory mockPersistenceSessionFactory;
-    
-    @Mock
-    private AuthenticationSession mockAuthenticationSession;
-
-    @Mock
-    private ObjectStoreSpi mockObjectStore;
-    @Mock
-    private AuditingService3 mockAuditingService3;
-    @Mock
-    private PublishingServiceWithDefaultPayloadFactories mockPublishingService;
-
-    @Mock
-    private CreateObjectCommand createObjectCommand;
-    @Mock
-    private SaveObjectCommand saveObjectCommand;
-    @Mock
-    private DestroyObjectCommand destroyObjectCommand;
-
-    @Mock
-    private Version mockVersion;
-
-    @Mock
-    private RuntimeContext mockRuntimeContext;
-
-    @Mock
-    private IsisConfiguration mockConfiguration;
-    
-    @Mock
-    private MessageBroker mockMessageBroker;
-    
-    
-    private IsisMetaModel isisMetaModel;
-
-
-
-    public static class Customer {
-    }
-
-    public static class CustomerRepository {
-        public Customer x() {return null;}
-    }
-    
-    @Before
-    public void setUp() throws Exception {
-        
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
-
-        context.ignoring(mockRuntimeContext);
-        context.ignoring(mockConfiguration);
-        context.ignoring(mockAuditingService3);
-
-        isisMetaModel = new IsisMetaModel(mockRuntimeContext, new 
ProgrammingModelFacetsJava5(), new CustomerRepository());
-        isisMetaModel.init();
-        
-        context.checking(new Expectations() {
-            {
-                ignoring(mockObjectStore).open();
-                ignoring(mockObjectStore).close();
-                ignoring(mockObjectStore).name();
-                ignoring(mockConfiguration);
-
-                ignoring(createObjectCommand);
-                ignoring(saveObjectCommand);
-                ignoring(destroyObjectCommand);
-                ignoring(mockVersion);
-                
-                allowing(mockAuthenticationSession).getMessageBroker();
-                will(returnValue(mockMessageBroker));
-            }
-        });
-
-        final RuntimeContextFromSession runtimeContext = new 
RuntimeContextFromSession();
-        final DomainObjectContainerDefault container = new 
DomainObjectContainerDefault();
-
-        runtimeContext.injectInto(container);
-
-        servicesInjector = new ServicesInjectorDefault(new 
InjectorMethodEvaluatorDefault());
-
-        adapterManager = new AdapterManagerDefault(new 
PojoRecreatorUnified(mockConfiguration));
-        adapterFactory = new PojoAdapterFactory();
-        persistenceSession = new 
PersistenceSession(mockPersistenceSessionFactory, adapterFactory, 
servicesInjector, new OidGenerator(new IdentifierGeneratorDefault()), 
adapterManager, mockObjectStore, mockConfiguration) {
-            @Override
-            protected SpecificationLoaderSpi getSpecificationLoader() {
-                return isisMetaModel.getSpecificationLoader();
-            }
-            
-        };
-        
-        
servicesInjector.setServices(Collections.<Object>singletonList(container));
-        
-        context.checking(new Expectations(){{
-            allowing(mockAuthenticationSession).getUserName();
-            will(returnValue("sven"));
-        }});
-
-        
-        transactionManager = new IsisTransactionManager(persistenceSession, 
mockObjectStore, servicesInjector) {
-            @Override
-            public AuthenticationSession getAuthenticationSession() {
-                return mockAuthenticationSession;
-            }
-        };
-        persistenceSession.setTransactionManager(transactionManager);
-
-        persistentAdapter = 
PojoAdapterBuilder.create().withOid("CUS|1").withPojo(new 
Customer()).with(Persistence.PERSISTENT).with(mockVersion).with(isisMetaModel.getSpecificationLoader()).build();
-        transientAdapter = 
PojoAdapterBuilder.create().withOid("CUS|2").withPojo(new 
Customer()).with(Persistence.TRANSIENT).with(isisMetaModel.getSpecificationLoader()).build();
-    }
-
-
-    @Test
-    public void destroyObjectThenAbort() {
-        
-        final Sequence tran = context.sequence("tran");
-        context.checking(new Expectations() {
-            {
-                one(mockObjectStore).startTransaction();
-                inSequence(tran);
-
-                
one(mockObjectStore).createDestroyObjectCommand(persistentAdapter);
-                inSequence(tran);
-
-                one(mockObjectStore).abortTransaction();
-                inSequence(tran);
-            }
-        });
-        
-        transactionManager.startTransaction();
-        persistenceSession.destroyObject(persistentAdapter);
-        transactionManager.abortTransaction();
-    }
-
-    @Test
-    public void destroyObject_thenCommit() {
-
-        final Sequence tran = context.sequence("tran");
-        context.checking(new Expectations() {
-            {
-                oneOf(mockObjectStore).startTransaction();
-                inSequence(tran);
-
-                
oneOf(mockObjectStore).createDestroyObjectCommand(persistentAdapter);
-                inSequence(tran);
-                will(returnValue(destroyObjectCommand));
-                
-                
oneOf(mockObjectStore).execute(with(IsisMatchers.listContaining((PersistenceCommand)destroyObjectCommand)));
-                inSequence(tran);
-
-                // second flush after publish
-                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
-                inSequence(tran);
-
-                // third flush after commands
-                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
-                inSequence(tran);
-
-                oneOf(mockObjectStore).endTransaction();
-                inSequence(tran);
-            }
-
-        });
-
-        transactionManager.startTransaction();
-        persistenceSession.destroyObject(persistentAdapter);
-        transactionManager.endTransaction();
-    }
-
-    @Test
-    public void makePersistent_happyCase() {
-
-        final Sequence tran = context.sequence("tran");
-        context.checking(new Expectations() {
-            {
-                oneOf(mockObjectStore).startTransaction();
-                inSequence(tran);
-
-                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
-                inSequence(tran);
-                // second flush after publish
-                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
-                inSequence(tran);
-                // third flush after commands
-                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
-                inSequence(tran);
-
-                oneOf(mockObjectStore).endTransaction();
-                inSequence(tran);
-            }
-        });
-
-        transactionManager.startTransaction();
-        persistenceSession.makePersistent(transientAdapter);
-        transactionManager.endTransaction();
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/46dc3a48/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
 
b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
new file mode 100644
index 0000000..2d67115
--- /dev/null
+++ 
b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
@@ -0,0 +1,268 @@
+/*
+ *  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.runtime.system.persistence;
+
+import java.util.Collections;
+import org.jmock.Expectations;
+import org.jmock.Sequence;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.apache.isis.applib.services.audit.AuditingService3;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.authentication.MessageBroker;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.matchers.IsisMatchers;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.app.IsisMetaModel;
+import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
+import 
org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import 
org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapterFactory;
+import 
org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
+import 
org.apache.isis.core.runtime.persistence.adaptermanager.PojoRecreatorUnified;
+import 
org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
+import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
+import org.apache.isis.core.runtime.persistence.objectstore.transaction.*;
+import 
org.apache.isis.core.runtime.persistence.objectstore.transaction.PojoAdapterBuilder.Persistence;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+
+public class PersistenceSessionTest {
+
+    @Rule
+    public JUnitRuleMockery2 context = 
JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+    private ServicesInjectorDefault servicesInjector;
+    private AdapterManagerSpi adapterManager;
+    private ObjectAdapterFactory adapterFactory;
+    
+    
+    private PersistenceSession persistenceSession;
+    private IsisTransactionManager transactionManager;
+    
+    private ObjectAdapter persistentAdapter;
+    private PojoAdapter transientAdapter;
+    
+    @Mock
+    private PersistenceSessionFactory mockPersistenceSessionFactory;
+    
+    @Mock
+    private AuthenticationSession mockAuthenticationSession;
+
+    @Mock
+    private ObjectStoreSpi mockObjectStore;
+    @Mock
+    private AuditingService3 mockAuditingService3;
+    @Mock
+    private PublishingServiceWithDefaultPayloadFactories mockPublishingService;
+
+    @Mock
+    private CreateObjectCommand createObjectCommand;
+    @Mock
+    private SaveObjectCommand saveObjectCommand;
+    @Mock
+    private DestroyObjectCommand destroyObjectCommand;
+
+    @Mock
+    private Version mockVersion;
+
+    @Mock
+    private RuntimeContext mockRuntimeContext;
+
+    @Mock
+    private IsisConfiguration mockConfiguration;
+    
+    @Mock
+    private MessageBroker mockMessageBroker;
+    
+    
+    private IsisMetaModel isisMetaModel;
+
+
+
+    public static class Customer {
+    }
+
+    public static class CustomerRepository {
+        public Customer x() {return null;}
+    }
+    
+    @Before
+    public void setUp() throws Exception {
+        
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
+
+        context.ignoring(mockRuntimeContext);
+        context.ignoring(mockConfiguration);
+        context.ignoring(mockAuditingService3);
+
+        isisMetaModel = new IsisMetaModel(mockRuntimeContext, new 
ProgrammingModelFacetsJava5(), new CustomerRepository());
+        isisMetaModel.init();
+        
+        context.checking(new Expectations() {
+            {
+                ignoring(mockObjectStore).open();
+                ignoring(mockObjectStore).close();
+                ignoring(mockObjectStore).name();
+                ignoring(mockConfiguration);
+
+                ignoring(createObjectCommand);
+                ignoring(saveObjectCommand);
+                ignoring(destroyObjectCommand);
+                ignoring(mockVersion);
+                
+                allowing(mockAuthenticationSession).getMessageBroker();
+                will(returnValue(mockMessageBroker));
+            }
+        });
+
+        final RuntimeContextFromSession runtimeContext = new 
RuntimeContextFromSession();
+        final DomainObjectContainerDefault container = new 
DomainObjectContainerDefault();
+
+        runtimeContext.injectInto(container);
+
+        servicesInjector = new ServicesInjectorDefault(new 
InjectorMethodEvaluatorDefault());
+
+        adapterManager = new AdapterManagerDefault(new 
PojoRecreatorUnified(mockConfiguration));
+        adapterFactory = new PojoAdapterFactory();
+        persistenceSession = new 
PersistenceSession(mockPersistenceSessionFactory, servicesInjector, 
mockObjectStore, mockConfiguration) {
+            @Override
+            protected SpecificationLoaderSpi getSpecificationLoader() {
+                return isisMetaModel.getSpecificationLoader();
+            }
+            
+        };
+        
+        
servicesInjector.setServices(Collections.<Object>singletonList(container));
+        
+        context.checking(new Expectations(){{
+            allowing(mockAuthenticationSession).getUserName();
+            will(returnValue("sven"));
+        }});
+
+        
+        transactionManager = new IsisTransactionManager(persistenceSession, 
mockObjectStore, servicesInjector) {
+            @Override
+            public AuthenticationSession getAuthenticationSession() {
+                return mockAuthenticationSession;
+            }
+        };
+        persistenceSession.setTransactionManager(transactionManager);
+
+        persistentAdapter = 
PojoAdapterBuilder.create().withOid("CUS|1").withPojo(new 
Customer()).with(Persistence.PERSISTENT).with(mockVersion).with(isisMetaModel.getSpecificationLoader()).build();
+        transientAdapter = 
PojoAdapterBuilder.create().withOid("CUS|2").withPojo(new 
Customer()).with(Persistence.TRANSIENT).with(isisMetaModel.getSpecificationLoader()).build();
+    }
+
+
+    @Test
+    public void destroyObjectThenAbort() {
+        
+        final Sequence tran = context.sequence("tran");
+        context.checking(new Expectations() {
+            {
+                one(mockObjectStore).startTransaction();
+                inSequence(tran);
+
+                
one(mockObjectStore).createDestroyObjectCommand(persistentAdapter);
+                inSequence(tran);
+
+                one(mockObjectStore).abortTransaction();
+                inSequence(tran);
+            }
+        });
+        
+        transactionManager.startTransaction();
+        persistenceSession.destroyObject(persistentAdapter);
+        transactionManager.abortTransaction();
+    }
+
+    @Test
+    public void destroyObject_thenCommit() {
+
+        final Sequence tran = context.sequence("tran");
+        context.checking(new Expectations() {
+            {
+                oneOf(mockObjectStore).startTransaction();
+                inSequence(tran);
+
+                
oneOf(mockObjectStore).createDestroyObjectCommand(persistentAdapter);
+                inSequence(tran);
+                will(returnValue(destroyObjectCommand));
+                
+                
oneOf(mockObjectStore).execute(with(IsisMatchers.listContaining((PersistenceCommand)destroyObjectCommand)));
+                inSequence(tran);
+
+                // second flush after publish
+                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
+                inSequence(tran);
+
+                // third flush after commands
+                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
+                inSequence(tran);
+
+                oneOf(mockObjectStore).endTransaction();
+                inSequence(tran);
+            }
+
+        });
+
+        transactionManager.startTransaction();
+        persistenceSession.destroyObject(persistentAdapter);
+        transactionManager.endTransaction();
+    }
+
+    @Test
+    public void makePersistent_happyCase() {
+
+        final Sequence tran = context.sequence("tran");
+        context.checking(new Expectations() {
+            {
+                oneOf(mockObjectStore).startTransaction();
+                inSequence(tran);
+
+                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
+                inSequence(tran);
+                // second flush after publish
+                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
+                inSequence(tran);
+                // third flush after commands
+                
oneOf(mockObjectStore).execute(with(equalTo(Collections.<PersistenceCommand>emptyList())));
+                inSequence(tran);
+
+                oneOf(mockObjectStore).endTransaction();
+                inSequence(tran);
+            }
+        });
+
+        transactionManager.startTransaction();
+        persistenceSession.makePersistent(transientAdapter);
+        transactionManager.endTransaction();
+    }
+}

Reply via email to