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 2012/05/15 00:45:03 UTC

svn commit: r1338472 [7/8] - in /incubator/isis/trunk/framework/runtimes/dflt: objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/ objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/internal/ ob...

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/transaction/IsisTransactionManager.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/transaction/IsisTransactionManager.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/transaction/IsisTransactionManager.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/transaction/IsisTransactionManager.java Mon May 14 22:44:57 2012
@@ -19,50 +19,116 @@
 
 package org.apache.isis.runtimes.dflt.runtime.system.transaction;
 
+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.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+
+import org.apache.log4j.Logger;
+
 import org.apache.isis.core.commons.components.Injectable;
 import org.apache.isis.core.commons.components.SessionScopedComponent;
 import org.apache.isis.core.commons.debug.DebugBuilder;
+import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStoreTransactionManagement;
+import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PersistenceCommand;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionTransactionManagement;
 import org.apache.isis.runtimes.dflt.runtime.system.session.IsisSession;
+import org.apache.isis.runtimes.dflt.runtime.transaction.IsisTransactionManagerException;
+import org.apache.isis.runtimes.dflt.runtime.transaction.messagebroker.MessageBrokerDefault;
+import org.apache.isis.runtimes.dflt.runtime.transaction.updatenotifier.UpdateNotifierDefault;
 
-public interface IsisTransactionManager extends SessionScopedComponent, Injectable {
+public class IsisTransactionManager implements SessionScopedComponent, Injectable {
 
-    // ////////////////////////////////////////////////////////////////////
-    // Session
-    // ////////////////////////////////////////////////////////////////////
+
+    private static final Logger LOG = Logger.getLogger(IsisTransactionManager.class);
+
+    private final PersistenceSessionTransactionManagement objectPersistor;
+    private final ObjectStoreTransactionManagement objectStore;
+
+    private int transactionLevel;
+    
+    private IsisSession session;
 
     /**
-     * The owning {@link IsisSession}.
-     * 
-     * <p>
-     * Will be non-<tt>null</tt> when {@link #open() open}ed, but <tt>null</tt>
-     * if {@link #close() close}d .
+     * Holds the current or most recently completed transaction.
      */
-    IsisSession getSession();
+    private IsisTransaction transaction;
 
-    // ////////////////////////////////////////////////////////////////////
-    // Transaction Management
-    // ////////////////////////////////////////////////////////////////////
+    
 
-    void startTransaction();
 
-    boolean flushTransaction();
 
-    void abortTransaction();
+    // ////////////////////////////////////////////////////////////////
+    // constructor
+    // ////////////////////////////////////////////////////////////////
+
+    public IsisTransactionManager(final PersistenceSessionTransactionManagement objectPersistor, final ObjectStoreTransactionManagement objectStore) {
+        this.objectPersistor = objectPersistor;
+        this.objectStore = objectStore;
+    }
+    
+    
+    // ////////////////////////////////////////////////////////////////
+    // open, close
+    // ////////////////////////////////////////////////////////////////
+
+    @Override
+    public void open() {
+        ensureThatState(session, is(notNullValue()), "session is required");
+    }
+
+    @Override
+    public void close() {
+        if (getTransaction() != null) {
+            try {
+                abortTransaction();
+            } catch (final Exception e2) {
+                LOG.error("failure during abort", e2);
+            }
+        }
+        session = null;
+    }
+
+    // //////////////////////////////////////////////////////
+    // current transaction (if any)
+    // //////////////////////////////////////////////////////
 
     /**
-     * Ends the transaction if nesting level is 0.
+     * The current transaction, if any.
      */
-    void endTransaction();
+    public IsisTransaction getTransaction() {
+        return transaction;
+    }
+
+    public int getTransactionLevel() {
+        return transactionLevel;
+    }
 
+
+    
     /**
-     * The current transaction, if any.
+     * Convenience method returning the {@link UpdateNotifier} of the
+     * {@link #getTransaction() current transaction}.
      */
-    IsisTransaction getTransaction();
+    protected UpdateNotifier getUpdateNotifier() {
+        return getTransaction().getUpdateNotifier();
+    }
 
-    // ////////////////////////////////////////////////////////////////////
+    /**
+     * Convenience method returning the {@link MessageBroker} of the
+     * {@link #getTransaction() current transaction}.
+     */
+    protected MessageBroker getMessageBroker() {
+        return getTransaction().getMessageBroker();
+    }
+
+    
+    // ////////////////////////////////////////////////////////////////
     // Transactional Execution
-    // ////////////////////////////////////////////////////////////////////
+    // ////////////////////////////////////////////////////////////////
 
     /**
      * Run the supplied {@link Runnable block of code (closure)} in a
@@ -75,7 +141,36 @@ public interface IsisTransactionManager 
      * end. If the closure throws an exception, then will
      * {@link #abortTransaction() abort} the transaction.
      */
-    public void executeWithinTransaction(TransactionalClosure closure);
+    public void executeWithinTransaction(final TransactionalClosure closure) {
+        final boolean initiallyInTransaction = inTransaction();
+        if (!initiallyInTransaction) {
+            startTransaction();
+        }
+        try {
+            closure.preExecute();
+            closure.execute();
+            closure.onSuccess();
+            if (!initiallyInTransaction) {
+                endTransaction();
+            }
+        } catch (final RuntimeException ex) {
+            closure.onFailure();
+            if (!initiallyInTransaction) {
+                // temp TODO fix swallowing of exception
+                // System.out.println(ex.getMessage());
+                // ex.printStackTrace();
+                try {
+                    abortTransaction();
+                } catch (final Exception e) {
+                    LOG.error("Abort failure after exception", e);
+                    // System.out.println(e.getMessage());
+                    // e.printStackTrace();
+                    throw new IsisTransactionManagerException("Abort failure: " + e.getMessage(), ex);
+                }
+            }
+            throw ex;
+        }
+    }
 
     /**
      * Run the supplied {@link Runnable block of code (closure)} in a
@@ -88,12 +183,211 @@ public interface IsisTransactionManager 
      * end. If the closure throws an exception, then will
      * {@link #abortTransaction() abort} the transaction.
      */
-    public <T> T executeWithinTransaction(TransactionalClosureWithReturn<T> closure);
+    public <Q> Q executeWithinTransaction(final TransactionalClosureWithReturn<Q> closure) {
+        final boolean initiallyInTransaction = inTransaction();
+        if (!initiallyInTransaction) {
+            startTransaction();
+        }
+        try {
+            closure.preExecute();
+            final Q retVal = closure.execute();
+            closure.onSuccess();
+            if (!initiallyInTransaction) {
+                endTransaction();
+            }
+            return retVal;
+        } catch (final RuntimeException ex) {
+            closure.onFailure();
+            if (!initiallyInTransaction) {
+                abortTransaction();
+            }
+            throw ex;
+        }
+    }
+
+    public boolean inTransaction() {
+        return getTransaction() != null && !getTransaction().getState().isComplete();
+    }
+
+    // ////////////////////////////////////////////////////////////////
+    // create transaction, + hooks
+    // ////////////////////////////////////////////////////////////////
+
+    /**
+     * Creates a new transaction and saves, to be accessible in
+     * {@link #getTransaction()}.
+     */
+    protected final IsisTransaction createTransaction() {
+        return this.transaction = createTransaction(createMessageBroker(), createUpdateNotifier());
+    }
+
+
+    /**
+     * The provided {@link MessageBroker} and {@link UpdateNotifier} are
+     * obtained from the hook methods ( {@link #createMessageBroker()} and
+     * {@link #createUpdateNotifier()}).
+     * 
+     * @see #createMessageBroker()
+     * @see #createUpdateNotifier()
+     */
+    protected IsisTransaction createTransaction(final MessageBroker messageBroker, final UpdateNotifier updateNotifier) {
+        ensureThatArg(messageBroker, is(not(nullValue())));
+        ensureThatArg(updateNotifier, is(not(nullValue())));
+
+        return new IsisTransaction(this, messageBroker, updateNotifier, objectStore);
+    }
+    
+
+    // //////////////////////////////////////////////////////
+    // start, flush, abort, end
+    // //////////////////////////////////////////////////////
+
+    public void startTransaction() {
+
+        boolean noneInProgress = false;
+        if (getTransaction() == null || getTransaction().getState().isComplete()) {
+            noneInProgress = true;
+
+            createTransaction();
+            transactionLevel = 0;
+            objectStore.startTransaction();
+        }
+
+        transactionLevel++;
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("startTransaction: level " + (transactionLevel - 1) + "->" + (transactionLevel) + (noneInProgress ? " (no transaction in progress or was previously completed; transaction created)" : ""));
+        }
+    }
+
+    public boolean flushTransaction() {
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("flushTransaction");
+        }
+
+        if (getTransaction() != null) {
+            objectPersistor.objectChangedAllDirty();
+            getTransaction().flush();
+        }
+        return false;
+    }
+
+    /**
+     * Ends the transaction if nesting level is 0.
+     */
+    public void endTransaction() {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("endTransaction: level " + (transactionLevel) + "->" + (transactionLevel - 1));
+        }
+
+        transactionLevel--;
+        if (transactionLevel == 0) {
+            LOG.debug("endTransaction: committing");
+            objectPersistor.objectChangedAllDirty();
+            getTransaction().commit();
+            objectStore.endTransaction();
+        } else if (transactionLevel < 0) {
+            LOG.error("endTransaction: transactionLevel=" + transactionLevel);
+            transactionLevel = 0;
+            throw new IllegalStateException(" no transaction running to end (transactionLevel < 0)");
+        }
+    }
+
+    public void abortTransaction() {
+        if (getTransaction() != null) {
+            getTransaction().abort();
+            transactionLevel = 0;
+            objectStore.abortTransaction();
+        }
+    }
+
+    public void addCommand(final PersistenceCommand command) {
+        getTransaction().addCommand(command);
+    }
+
+    // //////////////////////////////////////////////////////////////
+    // Hooks
+    // //////////////////////////////////////////////////////////////
+
+
+
+    
+    /**
+     * Overridable hook, used in
+     * {@link #createTransaction(MessageBroker, UpdateNotifier)
+     * 
+     * <p> Called when a new {@link IsisTransaction} is created.
+     */
+    protected MessageBroker createMessageBroker() {
+        return new MessageBrokerDefault();
+    }
+
+    /**
+     * Overridable hook, used in
+     * {@link #createTransaction(MessageBroker, UpdateNotifier)
+     * 
+     * <p> Called when a new {@link IsisTransaction} is created.
+     */
+    protected UpdateNotifier createUpdateNotifier() {
+        return new UpdateNotifierDefault();
+    }
+
+    // ////////////////////////////////////////////////////////////////
+    // helpers
+    // ////////////////////////////////////////////////////////////////
+
+    protected void ensureTransactionInProgress() {
+        ensureThatState(getTransaction() != null && !getTransaction().getState().isComplete(), is(true), "No transaction in progress");
+    }
+
+    protected void ensureTransactionNotInProgress() {
+        ensureThatState(getTransaction() != null && !getTransaction().getState().isComplete(), is(false), "Transaction in progress");
+    }
 
     // ////////////////////////////////////////////////////////////////////
-    // Debugging
+    // injectInto
     // ////////////////////////////////////////////////////////////////////
 
-    void debugData(DebugBuilder debug);
+    @Override
+    public void injectInto(final Object candidate) {
+        if (IsisTransactionManagerAware.class.isAssignableFrom(candidate.getClass())) {
+            final IsisTransactionManagerAware cast = IsisTransactionManagerAware.class.cast(candidate);
+            cast.setTransactionManager(this);
+        }
+    }
+
+    // //////////////////////////////////////////////////////
+    // debugging
+    // //////////////////////////////////////////////////////
+
+    public void debugData(final DebugBuilder debug) {
+        debug.appendln("Transaction", getTransaction());
+    }
+
+    // ////////////////////////////////////////////////////////////////
+    // Dependencies (injected)
+    // ////////////////////////////////////////////////////////////////
+
+    /**
+     * The owning {@link IsisSession}.
+     * 
+     * <p>
+     * Will be non-<tt>null</tt> when {@link #open() open}ed, but <tt>null</tt>
+     * if {@link #close() close}d .
+     */
+    public IsisSession getSession() {
+        return session;
+    }
+
+    /**
+     * Should be injected prior to {@link #open() opening}
+     */
+    public void setSession(final IsisSession session) {
+        this.session = session;
+    }
+
+
 
+    
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/systemusinginstallers/IsisSystemUsingInstallers.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/systemusinginstallers/IsisSystemUsingInstallers.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/systemusinginstallers/IsisSystemUsingInstallers.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/systemusinginstallers/IsisSystemUsingInstallers.java Mon May 14 22:44:57 2012
@@ -119,7 +119,7 @@ public class IsisSystemUsingInstallers e
 
     public void lookupAndSetAuthenticatorAndAuthorization(final DeploymentType deploymentType) {
 
-        final IsisConfiguration configuration = installerLookup.getConfiguration();
+        //final IsisConfiguration configuration = installerLookup.getConfiguration();
 
         // use the one specified in configuration
         final String authenticationManagerKey = getConfiguration().getString(SystemConstants.AUTHENTICATION_INSTALLER_KEY);

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/transaction/messagebroker/MessageBrokerDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/transaction/messagebroker/MessageBrokerDefault.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/transaction/messagebroker/MessageBrokerDefault.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/transaction/messagebroker/MessageBrokerDefault.java Mon May 14 22:44:57 2012
@@ -23,6 +23,8 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import com.google.common.collect.Lists;
+
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.exceptions.IsisException;
@@ -31,8 +33,8 @@ import org.apache.isis.runtimes.dflt.run
 
 public class MessageBrokerDefault implements MessageBroker, DebuggableWithTitle {
 
-    private final List<String> messages = new ArrayList<String>();
-    private final List<String> warnings = new ArrayList<String>();
+    private final List<String> messages = Lists.newArrayList();
+    private final List<String> warnings = Lists.newArrayList();
 
     public MessageBrokerDefault() {
     }

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/context/IsisContextTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/context/IsisContextTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/context/IsisContextTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/context/IsisContextTest.java Mon May 14 22:44:57 2012
@@ -33,16 +33,16 @@ import org.junit.Test;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.specloader.ObjectReflector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
 import org.apache.isis.core.runtime.imageloader.TemplateImageLoader;
-import org.apache.isis.core.runtime.userprofile.UserProfile;
 import org.apache.isis.core.runtime.userprofile.UserProfileLoader;
+import org.apache.isis.core.testsupport.jmock.IsisActions;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
-import org.apache.isis.runtimes.dflt.runtime.persistence.internal.RuntimeContextFromSession;
 import org.apache.isis.runtimes.dflt.runtime.system.DeploymentType;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContextStatic;
@@ -63,7 +63,7 @@ public class IsisContextTest {
     private PersistenceSession mockPersistenceSession;
     
     @Mock
-    private ObjectReflector mockReflector;
+    private SpecificationLoader mockSpecificationLoader;
 
     @Mock
     protected TemplateImageLoader mockTemplateImageLoader;
@@ -98,8 +98,7 @@ public class IsisContextTest {
                 will(returnValue(mockPersistenceSession));
                 
                 ignoring(mockPersistenceSession);
-
-                ignoring(mockReflector);
+                ignoring(mockSpecificationLoader);
                 ignoring(mockPersistenceSessionFactory);
                 ignoring(mockUserProfileLoader);
                 ignoring(mockAuthenticationManager);
@@ -108,7 +107,7 @@ public class IsisContextTest {
             }
         });
 
-        sessionFactory = new IsisSessionFactoryDefault(DeploymentType.EXPLORATION, configuration, mockTemplateImageLoader, mockReflector, mockAuthenticationManager, mockAuthorizationManager, mockUserProfileLoader, mockPersistenceSessionFactory, servicesList);
+        sessionFactory = new IsisSessionFactoryDefault(DeploymentType.EXPLORATION, configuration, mockTemplateImageLoader, mockSpecificationLoader, mockAuthenticationManager, mockAuthorizationManager, mockUserProfileLoader, mockPersistenceSessionFactory, servicesList);
         authSession = new SimpleSession("tester", Collections.<String>emptyList());
         
         IsisContext.setConfiguration(configuration);
@@ -116,7 +115,9 @@ public class IsisContextTest {
     
     @After
     public void tearDown() throws Exception {
-        IsisContext.closeSession();
+        if(IsisContext.inSession()) {
+            IsisContext.closeSession();
+        }
     }
     
     @Test
@@ -130,7 +131,7 @@ public class IsisContextTest {
         IsisContextStatic.createRelaxedInstance(sessionFactory);
         IsisContext.openSession(authSession);
 
-        Assert.assertEquals(mockReflector, IsisContext.getSpecificationLoader());
+        Assert.assertEquals(mockSpecificationLoader, IsisContext.getSpecificationLoader());
     }
 
     @Test

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/AdapterManagerDefault_aggregateAdapters.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/AdapterManagerDefault_aggregateAdapters.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/AdapterManagerDefault_aggregateAdapters.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/AdapterManagerDefault_aggregateAdapters.java Mon May 14 22:44:57 2012
@@ -19,6 +19,7 @@
 
 package org.apache.isis.runtimes.dflt.runtime.persistence;
 
+import static org.hamcrest.CoreMatchers.equalTo;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 
@@ -39,9 +40,11 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.progmodel.app.IsisMetaModel;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
@@ -80,7 +83,7 @@ public class AdapterManagerDefault_aggre
     public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
 
     @Mock
-    private ObjectAssociation mockAssociation;
+    private OneToManyAssociation mockCollection;
 
     @Mock
     private RuntimeContext mockRuntimeContext;
@@ -141,14 +144,14 @@ public class AdapterManagerDefault_aggre
         aggregatedObject = new Name();
         
         persistentParentAdapter = adapterManager.recreateAdapter(
-                RootOidDefault.create("CUS", "1"), rootObject);
+                RootOidDefault.create(ObjectSpecId.of("CUS"), "1"), rootObject);
     }
 
-    private void allowing_oidGenerator_createAggregatedLocalId(final Object value, final String result) {
+    private void allowing_oidGenerator_createAggregatedOid(final Object value, final AggregatedOid resultOid) {
         context.checking(new Expectations() {
             {
-                allowing(mockOidGenerator).createAggregateLocalId(value);
-                will(returnValue(result));
+                allowing(mockOidGenerator).createAggregateOid(with(equalTo(value)), with(any(ObjectAdapter.class)));
+                will(returnValue(resultOid));
                 ignoring(mockOidGenerator);
             }
         });
@@ -158,7 +161,9 @@ public class AdapterManagerDefault_aggre
     @Test
     public void adapterFor_whenAggregated() throws Exception {
         // given
-        allowing_oidGenerator_createAggregatedLocalId(aggregatedObject, "123");
+        allowing_oidGenerator_createAggregatedOid(
+                aggregatedObject, 
+                new AggregatedOid(ObjectSpecId.of("NME"), (TypedOid) persistentParentAdapter.getOid(), "123"));
         
         // when
         aggregatedAdapter = adapterManager.adapterFor(aggregatedObject, persistentParentAdapter);
@@ -170,7 +175,7 @@ public class AdapterManagerDefault_aggre
 
     @Test
     public void testOidHasSubId() throws Exception {
-        allowing_oidGenerator_createAggregatedLocalId(aggregatedObject, "123");
+        allowing_oidGenerator_createAggregatedOid(aggregatedObject, new AggregatedOid(ObjectSpecId.of("NME"), (TypedOid) persistentParentAdapter.getOid(), "123"));
         aggregatedAdapter = adapterManager.adapterFor(aggregatedObject, persistentParentAdapter);
 
         final AggregatedOid aggregatedOid = (AggregatedOid) aggregatedAdapter.getOid();
@@ -179,7 +184,7 @@ public class AdapterManagerDefault_aggre
 
     @Test
     public void getResolveState_isInitiallyGhost() throws Exception {
-        allowing_oidGenerator_createAggregatedLocalId(aggregatedObject, "123");
+        allowing_oidGenerator_createAggregatedOid(aggregatedObject, new AggregatedOid(ObjectSpecId.of("NME"), (TypedOid) persistentParentAdapter.getOid(), "123"));
         aggregatedAdapter = adapterManager.adapterFor(aggregatedObject, persistentParentAdapter);
 
         assertEquals(ResolveState.GHOST, aggregatedAdapter.getResolveState());
@@ -187,10 +192,10 @@ public class AdapterManagerDefault_aggre
 
     @Test
     public void testSameParametersRetrievesSameAdapter() throws Exception {
-        allowing_oidGenerator_createAggregatedLocalId(aggregatedObject, "123");
+        allowing_oidGenerator_createAggregatedOid(aggregatedObject, new AggregatedOid(ObjectSpecId.of("NME"), (TypedOid) persistentParentAdapter.getOid(), "123"));
         aggregatedAdapter = adapterManager.adapterFor(aggregatedObject, persistentParentAdapter);
 
-        final ObjectAdapter valueAdapter2 = adapterManager.adapterFor(aggregatedObject, persistentParentAdapter, mockAssociation);
+        final ObjectAdapter valueAdapter2 = adapterManager.adapterFor(aggregatedObject, persistentParentAdapter, mockCollection);
         assertSame(aggregatedAdapter, valueAdapter2);
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java Mon May 14 22:44:57 2012
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
 import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
@@ -65,7 +66,7 @@ public class PojoAdapterTest {
     public void setUp() throws Exception {
         domainObject = new RuntimeTestPojo();
         
-        adapter = new PojoAdapter(domainObject, RootOidDefault.create("CUS", "1"), mockSpecificationLoader, mockObjectAdapterLookup, mockLocalization);
+        adapter = new PojoAdapter(domainObject, RootOidDefault.create(ObjectSpecId.of("CUS"), "1"), mockSpecificationLoader, mockObjectAdapterLookup, mockLocalization);
         adapter.setVersion(mockVersion);
         
         allowUnimportantMethodCallsOn(mockVersion);
@@ -85,7 +86,7 @@ public class PojoAdapterTest {
 
     @Test
     public void getOid_initially() {
-        assertEquals(RootOidDefault.create("CUS", "1"), adapter.getOid());
+        assertEquals(RootOidDefault.create(ObjectSpecId.of("CUS"), "1"), adapter.getOid());
     }
 
     @Test

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStoreTest.java Mon May 14 22:44:57 2012
@@ -49,14 +49,16 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.algorithm.PersistAlgorithm;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.CreateObjectCommand;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.ObjectStoreTransactionManager;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PersistenceCommand;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PojoAdapterBuilder;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PojoAdapterBuilder.Persistence;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.SaveObjectCommand;
-import org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.serial.RootOidGenerator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGeneratorDefault;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.ObjectFactory;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
 
 public class PersistenceSessionObjectStoreTest {
 
@@ -68,8 +70,8 @@ public class PersistenceSessionObjectSto
     private ObjectAdapterFactory adapterFactory;
     
     
-    private PersistenceSessionObjectStore persistenceSession;
-    private ObjectStoreTransactionManager transactionManager;
+    private PersistenceSession persistenceSession;
+    private IsisTransactionManager transactionManager;
     
     private ObjectAdapter persistentAdapter;
     private PojoAdapter transientAdapter;
@@ -143,9 +145,9 @@ public class PersistenceSessionObjectSto
 
         adapterManager = new AdapterManagerDefault();
         adapterFactory = new PojoAdapterFactory();
-        persistenceSession = new PersistenceSessionObjectStore(mockPersistenceSessionFactory, adapterFactory, objectFactory, servicesInjector, new RootOidGenerator(), adapterManager, mockPersistAlgorithm, mockObjectStore);
+        persistenceSession = new PersistenceSession(mockPersistenceSessionFactory, adapterFactory, objectFactory, servicesInjector, new OidGenerator(new IdentifierGeneratorDefault()), adapterManager, mockPersistAlgorithm, mockObjectStore);
         
-        transactionManager = new ObjectStoreTransactionManager(persistenceSession, mockObjectStore);
+        transactionManager = new IsisTransactionManager(persistenceSession, mockObjectStore);
         transactionManager.injectInto(persistenceSession);
 
         servicesInjector.setServices(Collections.emptyList());

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManagerAbstractTestCase.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManagerAbstractTestCase.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManagerAbstractTestCase.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManagerAbstractTestCase.java Mon May 14 22:44:57 2012
@@ -20,39 +20,36 @@
 package org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction;
 
 import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.junit.Before;
-import org.junit.runner.RunWith;
+import org.jmock.auto.Mock;
+import org.junit.Rule;
 
+import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
+import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStoreTransactionManagement;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtimes.dflt.runtime.system.session.IsisSession;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
 
-@RunWith(JMock.class)
 public abstract class ObjectStoreTransactionManagerAbstractTestCase {
 
-    protected Mockery mockery = new JUnit4Mockery();
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
 
-    protected ObjectStoreTransactionManager transactionManager;
+    protected IsisTransactionManager transactionManager;
+    @Mock
     protected IsisSession mockSession;
+    @Mock
     protected PersistenceSession mockPersistenceSession;
+    @Mock
     protected ObjectStoreTransactionManagement mockObjectStore;
 
-    @Before
-    public void setUp() throws Exception {
-        mockSession = mockery.mock(IsisSession.class);
-        mockPersistenceSession = mockery.mock(PersistenceSession.class);
-        mockObjectStore = mockery.mock(ObjectStoreTransactionManagement.class);
-    }
 
     // //////////////////////////////////////////////////
     // Helpers
     // //////////////////////////////////////////////////
 
     protected void ignoreCallsToPersistenceSession() {
-        mockery.checking(new Expectations() {
+        context.checking(new Expectations() {
             {
                 ignoring(mockPersistenceSession);
             }
@@ -60,7 +57,7 @@ public abstract class ObjectStoreTransac
     }
 
     protected void ignoreCallsToObjectStore() {
-        mockery.checking(new Expectations() {
+        context.checking(new Expectations() {
             {
                 ignoring(mockObjectStore);
             }

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java Mon May 14 22:44:57 2012
@@ -27,11 +27,13 @@ import org.jmock.Sequence;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
+
 public class ObjectStoreTransactionManager_EndTransactionTest extends ObjectStoreTransactionManagerAbstractTestCase {
 
     @Before
     public void setUpTransactionManager() throws Exception {
-        transactionManager = new ObjectStoreTransactionManager(mockPersistenceSession, mockObjectStore);
+        transactionManager = new IsisTransactionManager(mockPersistenceSession, mockObjectStore);
     }
 
     @Test
@@ -41,9 +43,9 @@ public class ObjectStoreTransactionManag
         transactionManager.startTransaction();
         transactionManager.startTransaction();
 
-        assertThat(transactionManager.transactionLevel, is(2));
+        assertThat(transactionManager.getTransactionLevel(), is(2));
         transactionManager.endTransaction();
-        assertThat(transactionManager.transactionLevel, is(1));
+        assertThat(transactionManager.getTransactionLevel(), is(1));
     }
 
     @Test
@@ -52,14 +54,14 @@ public class ObjectStoreTransactionManag
         ignoreCallsToObjectStore();
         transactionManager.startTransaction();
 
-        mockery.checking(new Expectations() {
+        context.checking(new Expectations() {
             {
                 one(mockPersistenceSession).objectChangedAllDirty();
             }
         });
-        assertThat(transactionManager.transactionLevel, is(1));
+        assertThat(transactionManager.getTransactionLevel(), is(1));
         transactionManager.endTransaction();
-        assertThat(transactionManager.transactionLevel, is(0));
+        assertThat(transactionManager.getTransactionLevel(), is(0));
     }
 
     @Test
@@ -67,7 +69,7 @@ public class ObjectStoreTransactionManag
         // setup
         ignoreCallsToPersistenceSession();
 
-        mockery.checking(new Expectations() {
+        context.checking(new Expectations() {
             {
                 one(mockObjectStore).startTransaction();
             }
@@ -81,9 +83,9 @@ public class ObjectStoreTransactionManag
         // setup
         ignoreCallsToPersistenceSession();
 
-        mockery.checking(new Expectations() {
+        context.checking(new Expectations() {
             {
-                final Sequence transactionOrdering = mockery.sequence("transactionOrdering");
+                final Sequence transactionOrdering = context.sequence("transactionOrdering");
                 one(mockObjectStore).startTransaction();
                 inSequence(transactionOrdering);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_InstantiationTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_InstantiationTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_InstantiationTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_InstantiationTest.java Mon May 14 22:44:57 2012
@@ -21,11 +21,13 @@ package org.apache.isis.runtimes.dflt.ru
 
 import org.junit.Test;
 
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
+
 public class ObjectStoreTransactionManager_InstantiationTest extends ObjectStoreTransactionManagerAbstractTestCase {
 
     @Test
     public void canInstantiate() throws Exception {
-        transactionManager = new ObjectStoreTransactionManager(mockPersistenceSession, mockObjectStore);
+        transactionManager = new IsisTransactionManager(mockPersistenceSession, mockObjectStore);
     }
 
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_StartTransactionTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_StartTransactionTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_StartTransactionTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_StartTransactionTest.java Mon May 14 22:44:57 2012
@@ -29,11 +29,14 @@ import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
+
 public class ObjectStoreTransactionManager_StartTransactionTest extends ObjectStoreTransactionManagerAbstractTestCase {
 
     @Before
     public void setUpTransactionManager() throws Exception {
-        transactionManager = new ObjectStoreTransactionManager(mockPersistenceSession, mockObjectStore);
+        transactionManager = new IsisTransactionManager(mockPersistenceSession, mockObjectStore);
     }
 
     @Before
@@ -56,7 +59,7 @@ public class ObjectStoreTransactionManag
 
         // cause a transaction to be created
         transactionManager.startTransaction();
-        final ObjectStoreTransaction transactionAfterFirstStart = transactionManager.getTransaction();
+        final IsisTransaction transactionAfterFirstStart = transactionManager.getTransaction();
 
         transactionManager.startTransaction();
 
@@ -67,14 +70,14 @@ public class ObjectStoreTransactionManag
     public void startTransactionIncrementsTransactionLevel() throws Exception {
         ignoreCallsToObjectStore();
 
-        assertThat(transactionManager.transactionLevel, is(0));
+        assertThat(transactionManager.getTransactionLevel(), is(0));
         transactionManager.startTransaction();
-        assertThat(transactionManager.transactionLevel, is(1));
+        assertThat(transactionManager.getTransactionLevel(), is(1));
     }
 
     @Test
     public void startTransactionCallsStartTransactionOnObjectStore() throws Exception {
-        mockery.checking(new Expectations() {
+        context.checking(new Expectations() {
             {
                 one(mockObjectStore).startTransaction();
             }

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java Mon May 14 22:44:57 2012
@@ -32,6 +32,7 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
 import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.runtimes.dflt.runtime.persistence.adapterfactory.pojo.PojoAdapter;
@@ -51,7 +52,7 @@ public class PojoAdapterBuilder {
     
     private ObjectAdapterLookup objectAdapterLookup;
     
-    private String objectType = "CUS";
+    private ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
     private String identifier = "1";
     // only used if type is AGGREGATED
     private String aggregatedId = "firstName";
@@ -69,8 +70,8 @@ public class PojoAdapterBuilder {
     public static enum Persistence {
         TRANSIENT {
             @Override
-            Oid createOid(String objectType, String identifier) {
-                return RootOidDefault.createTransient(objectType, identifier);
+            RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
+                return RootOidDefault.createTransient(objectSpecId, identifier);
             }
 
             @Override
@@ -80,8 +81,8 @@ public class PojoAdapterBuilder {
         },
         PERSISTENT {
             @Override
-            Oid createOid(String objectType, String identifier) {
-                return RootOidDefault.create(objectType, identifier);
+            RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
+                return RootOidDefault.create(objectSpecId, identifier);
             }
 
             @Override
@@ -92,7 +93,7 @@ public class PojoAdapterBuilder {
         }, 
         VALUE {
             @Override
-            Oid createOid(String objectType, String identifier) {
+            RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
                 return null;
             }
 
@@ -101,7 +102,7 @@ public class PojoAdapterBuilder {
                 pojoAdapter.changeState(ResolveState.VALUE);
             }
         };
-        abstract Oid createOid(String objectType, String identifier);
+        abstract RootOid createOid(ObjectSpecId objectSpecId, String identifier);
 
         abstract void changeStateOn(PojoAdapter pojoAdapter);
     }
@@ -109,27 +110,27 @@ public class PojoAdapterBuilder {
     public static enum Type {
         ROOT {
             @Override
-            Oid oidFor(Oid oid, String aggregatedId) {
-                return oid;
+            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String unused) {
+                return rootOid;
             }
         }, AGGREGATED {
             @Override
-            Oid oidFor(Oid oid, String localId) {
-                return new AggregatedOid(oid, localId);
+            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String aggregateLocalId) {
+                return new AggregatedOid(objectSpecId, rootOid, aggregateLocalId);
             }
         }, COLLECTION {
             @Override
-            Oid oidFor(Oid oid, String collectionName) {
-                return new CollectionOid(oid, collectionName);
+            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
+                return new CollectionOid(rootOid, collectionId);
             }
         }, VALUE {
             @Override
-            Oid oidFor(Oid oid, String aggregatedId) {
+            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String unused) {
                 return null;
             }
         };
 
-        abstract Oid oidFor(Oid oid, String aggregatedId);
+        abstract Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String supplementalId);
     }
 
     public static PojoAdapterBuilder create() {
@@ -147,7 +148,7 @@ public class PojoAdapterBuilder {
     }
     
     public PojoAdapterBuilder withObjectType(String objectType) {
-        this.objectType = objectType;
+        this.objectSpecId = ObjectSpecId.of(objectType);
         return this;
     }
     
@@ -220,9 +221,9 @@ public class PojoAdapterBuilder {
     }
 
     public PojoAdapter build() {
-        Oid oid = persistence.createOid(objectType, identifier);
-        oid = type.oidFor(oid, aggregatedId);
-        PojoAdapter pojoAdapter = new PojoAdapter(pojo, oid, specificationLoader, objectAdapterLookup, localization) {
+        final RootOid rootOid = persistence.createOid(objectSpecId, identifier);
+        final Oid oid = type.oidFor(rootOid, objectSpecId, aggregatedId);
+        final PojoAdapter pojoAdapter = new PojoAdapter(pojo, oid, specificationLoader, objectAdapterLookup, localization) {
             @Override
             public ObjectSpecification getSpecification() { return objectSpec != null? objectSpec: super.getSpecification(); }
             @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/TransactionTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/TransactionTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/TransactionTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/TransactionTest.java Mon May 14 22:44:57 2012
@@ -33,6 +33,7 @@ import org.apache.isis.core.testsupport.
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PojoAdapterBuilder.Persistence;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.MessageBroker;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.UpdateNotifier;
@@ -41,10 +42,9 @@ import org.apache.isis.runtimes.dflt.run
 public class TransactionTest {
 
     @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY);
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
     
-    
-    private ObjectStoreTransaction transaction;
+    private IsisTransaction transaction;
 
     private ObjectAdapter transientAdapter1;
     private ObjectAdapter transientAdapter2;
@@ -145,7 +145,7 @@ public class TransactionTest {
     public void setUp() throws Exception {
         Logger.getRootLogger().setLevel(Level.OFF);
 
-        transaction = new ObjectStoreTransaction(mockTransactionManager, mockMessageBroker, mockUpdateNotifier, mockObjectStore);
+        transaction = new IsisTransaction(mockTransactionManager, mockMessageBroker, mockUpdateNotifier, mockObjectStore);
         
         transientAdapter1 = PojoAdapterBuilder.create().with(Persistence.TRANSIENT).withIdentifier("1").build();
         transientAdapter2 = PojoAdapterBuilder.create().with(Persistence.TRANSIENT).withIdentifier("2").build();

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/IsisSystemWithFixtures.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/IsisSystemWithFixtures.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/IsisSystemWithFixtures.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/IsisSystemWithFixtures.java Mon May 14 22:44:57 2012
@@ -22,9 +22,12 @@ package org.apache.isis.runtimes.dflt.te
 import java.util.Arrays;
 import java.util.List;
 
+import com.google.common.collect.Lists;
+
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -41,9 +44,12 @@ import org.apache.isis.runtimes.dflt.obj
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
 import org.apache.isis.runtimes.dflt.runtime.persistence.adaptermanager.AdapterManagerPersist;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStore;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.system.DeploymentType;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction.State;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures.Fixtures.Initialization;
 import org.apache.isis.security.dflt.authentication.AuthenticationRequestDefault;
 import org.apache.isis.tck.dom.eg.ExamplePojoAggregated;
@@ -59,6 +65,38 @@ import org.apache.isis.tck.dom.eg.TestPo
  */
 public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
 
+    public interface Listener {
+
+        void preSetupSystem(boolean firstTime);
+        void postSetupSystem();
+        
+        void preTeardownSystem();
+        void postTeardownSystem();
+        
+    }
+    
+    public static abstract class ListenerAdapter implements Listener {
+
+        @Override
+        public void preSetupSystem(boolean firstTime) {
+        }
+
+        @Override
+        public void postSetupSystem() {
+        }
+
+        @Override
+        public void preTeardownSystem() {
+        }
+
+        @Override
+        public void postTeardownSystem() {
+        }
+        
+    }
+
+
+
     /**
      * A precanned set of fixtures for use by tests if desired.
      */
@@ -121,6 +159,7 @@ public class IsisSystemWithFixtures impl
     private final PersistenceMechanismInstaller persistenceMechanismInstaller;
     private final AuthenticationRequest authenticationRequest;
     private final List<Object> services;
+    private List <Listener> listeners;
 
     
     ////////////////////////////////////////////////////////////
@@ -135,6 +174,7 @@ public class IsisSystemWithFixtures impl
         private IsisConfiguration configuration;
         private PersistenceMechanismInstaller persistenceMechanismInstaller = new InMemoryPersistenceMechanismInstaller();
 
+        private final List <Listener> listeners = Lists.newArrayList();
         private Object[] services;
 
         public Builder with(IsisConfiguration configuration) {
@@ -164,7 +204,14 @@ public class IsisSystemWithFixtures impl
         
         public IsisSystemWithFixtures build() {
             final List<Object> servicesIfAny = services != null? Arrays.asList(services): null;
-            return new IsisSystemWithFixtures(fixturesInitialization, configuration, persistenceMechanismInstaller, authenticationRequest, servicesIfAny);
+            return new IsisSystemWithFixtures(fixturesInitialization, configuration, persistenceMechanismInstaller, authenticationRequest, servicesIfAny, listeners);
+        }
+
+        public Builder with(Listener listener) {
+            if(listener != null) {
+                listeners.add(listener);
+            }
+            return this;
         }
     }
 
@@ -172,7 +219,7 @@ public class IsisSystemWithFixtures impl
         return new Builder();
     }
 
-    private IsisSystemWithFixtures(Initialization fixturesInitialization, IsisConfiguration configuration, PersistenceMechanismInstaller persistenceMechanismInstaller, AuthenticationRequest authenticationRequest, List<Object> services) {
+    private IsisSystemWithFixtures(Initialization fixturesInitialization, IsisConfiguration configuration, PersistenceMechanismInstaller persistenceMechanismInstaller, AuthenticationRequest authenticationRequest, List<Object> services, List<Listener> listeners) {
         this.fixturesInitialization = fixturesInitialization;
         this.configuration = configuration;
         this.persistenceMechanismInstaller = persistenceMechanismInstaller;
@@ -182,6 +229,7 @@ public class IsisSystemWithFixtures impl
             services = Arrays.asList(fixtures.testPojoRepository, fixtures.examplePojoRepository);
         }
         this.services = services;
+        this.listeners = listeners;
     }
 
 
@@ -197,6 +245,8 @@ public class IsisSystemWithFixtures impl
         Logger.getRootLogger().setLevel(Level.OFF);
 
         boolean firstTime = isisSystem == null;
+        firePreSetupSystem(firstTime);
+        
         if(firstTime) {
             isisSystem = createIsisSystem(services);
             isisSystem.init();
@@ -211,8 +261,10 @@ public class IsisSystemWithFixtures impl
         if(firstTime && fixturesInitialization == Fixtures.Initialization.INIT) {
             fixtures.init(container);
         }
+        firePostSetupSystem(firstTime);
     }
 
+
     private DomainObjectContainer getContainer() {
         return IsisContext.getPersistenceSession().getServicesInjector().getContainer();
     }
@@ -221,7 +273,9 @@ public class IsisSystemWithFixtures impl
      * Intended to be called from a test's {@link After} method.
      */
     public void tearDownSystem() throws Exception {
+        firePreTeardownSystem();
         IsisContext.closeSession();
+        firePostTeardownSystem();
     }
 
     public void bounceSystem() throws Exception {
@@ -252,6 +306,34 @@ public class IsisSystemWithFixtures impl
 
 
 
+    ////////////////////////////////////////////////////////////
+    // listeners
+    ////////////////////////////////////////////////////////////
+
+    private void firePreSetupSystem(boolean firstTime) {
+        for(Listener listener: listeners) {
+            listener.preSetupSystem(firstTime);
+        }
+    }
+
+    private void firePostSetupSystem(boolean firstTime) {
+        for(Listener listener: listeners) {
+            listener.preSetupSystem(firstTime);
+        }
+    }
+
+    private void firePreTeardownSystem() {
+        for(Listener listener: listeners) {
+            listener.preTeardownSystem();
+        }
+    }
+
+    private void firePostTeardownSystem() {
+        for(Listener listener: listeners) {
+            listener.postTeardownSystem();
+        }
+    }
+
     
     ////////////////////////////////////////////////////////////
     // properties
@@ -306,22 +388,28 @@ public class IsisSystemWithFixtures impl
         return IsisContext.getPersistenceSession().getAdapterManager().adapterFor(domainObject);
     }
 
+    public ObjectAdapter reload(RootOid oid) {
+        ensureSessionInProgress();
+        final PersistenceSession persistenceSession = IsisContext.getPersistenceSession();
+        return persistenceSession.loadObject(oid);
+    }
+
     public ObjectAdapter recreateAdapter(RootOid oid) {
         ensureSessionInProgress();
         return IsisContext.getPersistenceSession().recreateAdapter(oid);
     }
 
-    public ObjectAdapter remapAsPersistent(RootOid oid, Object pojo) {
+    public ObjectAdapter remapAsPersistent(Object pojo, RootOid persistentOid) {
         ensureSessionInProgress();
         ensureObjectIsNotPersistent(pojo);
         final ObjectAdapter adapter = adapterFor(pojo);
-        ((AdapterManagerPersist)IsisContext.getPersistenceSession().getAdapterManager()).remapAsPersistent(adapter);
+        getAdapterManagerPersist().remapAsPersistent(adapter, persistentOid);
         return adapter;
     }
 
     @SuppressWarnings("unchecked")
     public <T extends ObjectStore> T getObjectStore(Class<T> cls) {
-        final PersistenceSessionObjectStore persistenceSession = (PersistenceSessionObjectStore) IsisContext.getPersistenceSession();
+        final PersistenceSession persistenceSession = IsisContext.getPersistenceSession();
         return (T) persistenceSession.getObjectStore();
     }
 
@@ -363,6 +451,82 @@ public class IsisSystemWithFixtures impl
     }
 
 
+    
+    private AdapterManagerPersist getAdapterManagerPersist() {
+        return (AdapterManagerPersist)IsisContext.getPersistenceSession().getAdapterManager();
+    }
+
+    public void beginTran() {
+        final IsisTransactionManager transactionManager = IsisContext.getPersistenceSession().getTransactionManager();
+        final IsisTransaction transaction = transactionManager.getTransaction();
+
+        if(transaction == null) {
+            transactionManager.startTransaction();
+            return;
+        } 
+
+        final State state = transaction.getState();
+        switch(state) {
+            case COMMITTED:
+            case ABORTED:
+                transactionManager.startTransaction();
+                break;
+            case IN_PROGRESS:
+                // nothing to do
+                break;
+            case MUST_ABORT:
+                Assert.fail("Transaction is in state of '" + state + "'");
+                break;
+            default:
+                Assert.fail("Unknown transaction state '" + state + "'");
+        }
+        
+    }
+
+    public void commitTran() {
+        final IsisTransactionManager transactionManager = IsisContext.getPersistenceSession().getTransactionManager();
+        final IsisTransaction transaction = transactionManager.getTransaction();
+        if(transaction == null) {
+            Assert.fail("No transaction exists");
+            return;
+        } 
+        final State state = transaction.getState();
+        switch(state) {
+            case COMMITTED:
+            case ABORTED:
+            case MUST_ABORT:
+                Assert.fail("Transaction is in state of '" + state + "'");
+                break;
+            case IN_PROGRESS:
+                transactionManager.endTransaction();
+                break;
+            default:
+                Assert.fail("Unknown transaction state '" + state + "'");
+        }
+    }
+
+    public void abortTran() {
+        final IsisTransactionManager transactionManager = IsisContext.getPersistenceSession().getTransactionManager();
+        final IsisTransaction transaction = transactionManager.getTransaction();
+        if(transaction == null) {
+            Assert.fail("No transaction exists");
+            return;
+        } 
+        final State state = transaction.getState();
+        switch(state) {
+            case ABORTED:
+                break;
+            case COMMITTED:
+                Assert.fail("Transaction is in state of '" + state + "'");
+                break;
+            case MUST_ABORT:
+            case IN_PROGRESS:
+                transactionManager.abortTransaction();
+                break;
+            default:
+                Assert.fail("Unknown transaction state '" + state + "'");
+        }
+    }
 
     
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/tck/ObjectStoreContractTest_persist.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/tck/ObjectStoreContractTest_persist.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/tck/ObjectStoreContractTest_persist.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/tck/ObjectStoreContractTest_persist.java Mon May 14 22:44:57 2012
@@ -20,19 +20,23 @@
 package org.apache.isis.runtimes.dflt.testsupport.tck;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotSame;
 
+import java.util.Date;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStore;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.persistence.query.PersistenceQueryFindByTitle;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures;
 import org.apache.isis.tck.dom.eg.ExamplePojoWithValues;
 
@@ -40,18 +44,30 @@ public abstract class ObjectStoreContrac
 
     @Rule
     public IsisSystemWithFixtures iswf = IsisSystemWithFixtures.builder()
-        .with(createPersistenceMechanismInstaller()).build();
+        .with(createPersistenceMechanismInstaller())
+        .with(iswfListener()).build();
 
+    
     /**
      * Mandatory hook.
      */
     protected abstract PersistenceMechanismInstaller createPersistenceMechanismInstaller();
 
+    protected IsisSystemWithFixtures.Listener iswfListener() {
+        return null;
+    }
+
+    /**
+     * hook method
+     */
+    protected void resetPersistenceStore() {
+    }
+    
     protected ObjectAdapter epv2Adapter;
     protected ObjectSpecification epvSpecification;
 
     protected ObjectStore getStore() {
-        PersistenceSessionObjectStore psos = (PersistenceSessionObjectStore)IsisContext.getPersistenceSession();
+        PersistenceSession psos = IsisContext.getPersistenceSession();
         return (ObjectStore) psos.getObjectStore();
     }
 
@@ -66,21 +82,28 @@ public abstract class ObjectStoreContrac
     @Test
     public void getInstances_usingFindByTitle() throws Exception {
 
-        final String titleString = epv2Adapter.titleString();
+        // given nothing in DB
+        resetPersistenceStore();
         
-        // when locate
-        ObjectAdapter[] retrievedInstance = getStore().getInstances(new PersistenceQueryFindByTitle(epvSpecification, titleString));
+        // when search for any object
+        boolean hasInstances = getStore().hasInstances(epvSpecification);
         
-        // then none
-        assertEquals(0, retrievedInstance.length);
+        // then find none
+        assertFalse(hasInstances);
         
         // given now persisted
-        iswf.persist(iswf.fixtures.epv2);
+        final ExamplePojoWithValues epv2 = iswf.fixtures.epv2;
+        epv2.setName("foo");
+        epv2.setDate(new Date());
+        epv2.setNullable(1234567890L);
+        epv2.setSize(123);
+        
+        iswf.persist(epv2);
 
         iswf.bounceSystem();
         
-        // when locate
-        retrievedInstance = getStore().getInstances(new PersistenceQueryFindByTitle(epvSpecification, titleString));
+        // when search for object
+        ObjectAdapter[] retrievedInstance = getStore().getInstances(new PersistenceQueryFindByTitle(epvSpecification, epv2Adapter.titleString()));
         
         // then find
         assertEquals(1, retrievedInstance.length);
@@ -90,47 +113,55 @@ public abstract class ObjectStoreContrac
         assertEquals(((ExamplePojoWithValues)epv2Adapter.getObject()).getName(), ((ExamplePojoWithValues)retrievedAdapter.getObject()).getName());
         assertEquals(epv2Adapter.getOid(), retrievedAdapter.getOid());
 
-
-        // and then don't find by other title
+        // and when search for some other title
         retrievedInstance = getStore().getInstances(new PersistenceQueryFindByTitle(epvSpecification, "some other title"));
+        
+        // then don't find
         assertEquals(0, retrievedInstance.length);
     }
 
 
     @Test
-    public void saveInstance() throws Exception {
+    public void updateInstance() throws Exception {
 
         // given persisted
-        iswf.persist(iswf.fixtures.epv2);
-        
+        resetPersistenceStore();
+        ObjectAdapter adapter = iswf.persist(iswf.fixtures.epv2);
+        final RootOid oid = (RootOid) adapter.getOid();
         iswf.bounceSystem();
         
-        // when change (xactn is implicitly committed here)
-        iswf.fixtures.epv2.setName("changed");
+        // when change
+        adapter = iswf.reload(oid);
+        
+        ExamplePojoWithValues epv = (ExamplePojoWithValues) adapter.getObject();
+        epv.setName("changed");
 
         iswf.bounceSystem();
 
         // then found
-        ObjectAdapter[] retrievedInstance = getStore().getInstances(new PersistenceQueryFindByTitle(epvSpecification, "changed"));
+        ObjectAdapter[] retrievedInstance = getStore().getInstances(new PersistenceQueryFindByTitle(epvSpecification, adapter.titleString()));
         assertEquals(1, retrievedInstance.length);
         
         final ObjectAdapter retrievedAdapter = retrievedInstance[0];
-        assertNotSame(epv2Adapter, retrievedAdapter);
-        assertEquals(((ExamplePojoWithValues)epv2Adapter.getObject()).getName(), ((ExamplePojoWithValues)retrievedAdapter.getObject()).getName());
-        assertEquals(epv2Adapter.getOid(), retrievedAdapter.getOid());
+        assertNotSame(adapter, retrievedAdapter);
+        assertEquals(((ExamplePojoWithValues)adapter.getObject()).getName(), ((ExamplePojoWithValues)retrievedAdapter.getObject()).getName());
+        assertEquals(adapter.getOid(), retrievedAdapter.getOid());
     }
 
     @Test
     public void removeInstance() throws Exception {
 
         // given persisted
-        iswf.persist(iswf.fixtures.epv2);
-        
+        resetPersistenceStore();
+        ObjectAdapter adapter = iswf.persist(iswf.fixtures.epv2);
+        final RootOid oid = (RootOid) adapter.getOid();
         iswf.bounceSystem();
 
         // when destroy
-        iswf.destroy(iswf.fixtures.epv2);
+        adapter = iswf.reload(oid);
         
+        ExamplePojoWithValues epv = (ExamplePojoWithValues) adapter.getObject();
+        iswf.destroy(epv);
         iswf.bounceSystem();
 
         // then not found

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_debug.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_debug.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_debug.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_debug.java Mon May 14 22:44:57 2012
@@ -27,8 +27,8 @@ import org.junit.Test;
 
 import org.apache.isis.core.commons.debug.DebugString;
 import org.apache.isis.core.commons.matchers.IsisMatchers;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures;
 
 public class InMemoryObjectStoreTest_debug {
@@ -37,8 +37,7 @@ public class InMemoryObjectStoreTest_deb
     public IsisSystemWithFixtures iswf = IsisSystemWithFixtures.builder().build();
     
     private static InMemoryObjectStore getStore() {
-        PersistenceSessionObjectStore psos = (PersistenceSessionObjectStore)IsisContext.getPersistenceSession();
-        return (InMemoryObjectStore) psos.getObjectStore();
+        return (InMemoryObjectStore) IsisContext.getPersistenceSession().getObjectStore();
     }
 
     @Test
@@ -64,7 +63,7 @@ public class InMemoryObjectStoreTest_deb
         
         
         // then
-        assertThat(debug.toString(), IsisMatchers.containsStripNewLines("OID:EPV#3"));
+        assertThat(debug.toString(), IsisMatchers.containsStripNewLines("EPV:3"));
     }
 
     

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_init.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_init.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_init.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_init.java Mon May 14 22:44:57 2012
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertFal
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures;
 
@@ -34,8 +33,7 @@ public class InMemoryObjectStoreTest_ini
     public IsisSystemWithFixtures iswf = IsisSystemWithFixtures.builder().build();
     
     private static InMemoryObjectStore getStore() {
-        PersistenceSessionObjectStore psos = (PersistenceSessionObjectStore)IsisContext.getPersistenceSession();
-        return (InMemoryObjectStore) psos.getObjectStore();
+        return (InMemoryObjectStore) IsisContext.getPersistenceSession().getObjectStore();
     }
 
     @Test

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_persist.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_persist.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_persist.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_persist.java Mon May 14 22:44:57 2012
@@ -20,6 +20,7 @@
 package org.apache.isis.runtimes.dflt.objectstores.dflt;
 
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
+import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures.Listener;
 import org.apache.isis.runtimes.dflt.testsupport.tck.ObjectStoreContractTest_persist;
 
 public class InMemoryObjectStoreTest_persist extends ObjectStoreContractTest_persist {
@@ -28,4 +29,9 @@ public class InMemoryObjectStoreTest_per
     protected PersistenceMechanismInstaller createPersistenceMechanismInstaller() {
         return new InMemoryPersistenceMechanismInstaller();
     }
+
+    @Override
+    protected Listener iswfListener() {
+        return null;
+    }
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_reset.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_reset.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_reset.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_reset.java Mon May 14 22:44:57 2012
@@ -28,7 +28,6 @@ import org.junit.Test;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManager;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
@@ -47,8 +46,7 @@ public class InMemoryObjectStoreTest_res
     protected ObjectSpecification epvSpecification;
 
     protected InMemoryObjectStore getStore() {
-        PersistenceSessionObjectStore psos = (PersistenceSessionObjectStore)IsisContext.getPersistenceSession();
-        return (InMemoryObjectStore) psos.getObjectStore();
+        return (InMemoryObjectStore) IsisContext.getPersistenceSession().getObjectStore();
     }
 
     @Before

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_retrieve.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_retrieve.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_retrieve.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_retrieve.java Mon May 14 22:44:57 2012
@@ -30,15 +30,14 @@ import org.junit.Test;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtimes.dflt.runtime.persistence.ObjectNotFoundException;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.persistence.query.PersistenceQueryFindAllInstances;
 import org.apache.isis.runtimes.dflt.runtime.persistence.query.PersistenceQueryFindByTitle;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures;
 import org.apache.isis.tck.dom.eg.ExamplePojoWithValues;
-import org.apache.isis.tck.dom.eg.TestPojo;
 
 public class InMemoryObjectStoreTest_retrieve {
 
@@ -49,8 +48,7 @@ public class InMemoryObjectStoreTest_ret
     protected ObjectSpecification epvSpecification;
 
     protected InMemoryObjectStore getStore() {
-        PersistenceSessionObjectStore psos = (PersistenceSessionObjectStore)IsisContext.getPersistenceSession();
-        return (InMemoryObjectStore) psos.getObjectStore();
+        return (InMemoryObjectStore) IsisContext.getPersistenceSession().getObjectStore();
     }
 
     @Before
@@ -61,9 +59,9 @@ public class InMemoryObjectStoreTest_ret
 
     @Test
     public void getObject_whenDoesNotExist() {
-        final Oid oid = RootOidDefault.create("EPV|10");
+        final TypedOid oid = RootOidDefault.deString("EPV:10");
         try {
-            getStore().getObject(oid, epvSpecification);
+            getStore().getObject(oid);
             fail();
         } catch (final ObjectNotFoundException expected) {
         }
@@ -76,7 +74,7 @@ public class InMemoryObjectStoreTest_ret
         iswf.persist(iswf.fixtures.epv2);
         iswf.bounceSystem();
 
-        final ObjectAdapter retrievedAdapter = getStore().getObject(epv2Adapter.getOid(), epvSpecification);
+        final ObjectAdapter retrievedAdapter = getStore().getObject((TypedOid) epv2Adapter.getOid());
         
         assertNotSame(epv2Adapter, retrievedAdapter);
         assertEquals(((ExamplePojoWithValues)epv2Adapter.getObject()).getName(), ((ExamplePojoWithValues)retrievedAdapter.getObject()).getName());

Modified: incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_serviceRegistry.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_serviceRegistry.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_serviceRegistry.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStoreTest_serviceRegistry.java Mon May 14 22:44:57 2012
@@ -28,8 +28,8 @@ import org.junit.Test;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.PersistenceSessionObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.testsupport.IsisSystemWithFixtures;
 import org.apache.isis.tck.dom.eg.ExamplePojoWithValues;
@@ -44,8 +44,7 @@ public class InMemoryObjectStoreTest_ser
     protected ObjectSpecification epvSpecification;
 
     protected InMemoryObjectStore getStore() {
-        PersistenceSessionObjectStore psos = (PersistenceSessionObjectStore)IsisContext.getPersistenceSession();
-        return (InMemoryObjectStore) psos.getObjectStore();
+        return (InMemoryObjectStore) IsisContext.getPersistenceSession().getObjectStore();
     }
 
     @Before
@@ -57,7 +56,7 @@ public class InMemoryObjectStoreTest_ser
     @Test
     public void getOidForServices() throws Exception {
         final Oid oidForService = getStore().getOidForService(iswf.loadSpecification(TestPojoRepository.class));
-        assertEquals(RootOidDefault.create(TestPojoRepository.class.getName(), "1"), oidForService);
+        assertEquals(RootOidDefault.create(ObjectSpecId.of("TestPojoRepository"), "1"), oidForService);
     }