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 2017/10/16 16:01:31 UTC

[isis] 09/09: ISIS-1742: fixes up compile issues resulting from removal of methods from DomainObjectContainer

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch dev/2.0.0/ISIS-1742-remove-deprecations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 0fdeaf933b6e40ad2b2c450619de7d0243e42dfe
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 16 17:01:08 2017 +0100

    ISIS-1742: fixes up compile issues resulting from removal of methods from DomainObjectContainer
    
    Includes some refactoring of DomainServiceProvider
---
 .../isis/applib/fixturescripts/FixtureScript.java  |  7 +---
 .../isis/applib/fixturescripts/FixtureScripts.java | 19 ++++++++--
 .../isis/applib/services/bookmark/Bookmark.java    |  4 ++
 .../exceprecog/ExceptionRecognizerComposite.java   |  8 ++--
 .../schema/services/jaxb/JaxbServiceDefault.java   |  8 ++--
 .../ExceptionRecognizerCompositeTest.java          | 11 ++++--
 .../integtestsupport/IntegrationTestAbstract.java  |  5 ++-
 .../core/integtestsupport/IsisSystemForTest.java   |  4 --
 .../container/DomainObjectContainerDefault.java    |  8 ++--
 .../services/grid/GridLoaderServiceDefault.java    |  6 +--
 .../ApplicationFeatureRepositoryDefaultTest.java   | 20 +++++-----
 .../scenarios/DomainServiceProvider.java           |  2 -
 .../scenarios/DomainServiceProviderMockery.java    | 43 +++++++++++++++-------
 .../specsupport/scenarios/ScenarioExecution.java   |  7 +---
 14 files changed, 88 insertions(+), 64 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index 4bbcf68..99eb406 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -542,7 +542,7 @@ public abstract class FixtureScript
             if(localNameOverride != null) {
                 childFixtureScript.setLocalName(localNameOverride);
             }
-            callingFixtureScript.container.injectServicesInto(childFixtureScript);
+            callingFixtureScript.serviceRegistry.injectServicesInto(childFixtureScript);
 
             executeChildIfNotAlready(childFixtureScript);
 
@@ -864,7 +864,7 @@ public abstract class FixtureScript
      * Convenience method
      */
     protected <T> T mixin(final Class<T> mixinClass, final Object mixedIn) {
-        return container.mixin(mixinClass, mixedIn);
+        return factoryService.mixin(mixinClass, mixedIn);
     }
 
     /**
@@ -891,9 +891,6 @@ public abstract class FixtureScript
     protected FixtureScripts fixtureScripts;
 
     @javax.inject.Inject
-    protected DomainObjectContainer container;
-
-    @javax.inject.Inject
     protected FactoryService factoryService;
 
     @javax.inject.Inject
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 3a5abd0..547bc2c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -48,7 +48,11 @@ import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
 import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecification;
 import org.apache.isis.applib.services.memento.MementoService;
 import org.apache.isis.applib.services.memento.MementoService.Memento;
+import org.apache.isis.applib.services.message.MessageService;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
+import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
+import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.applib.util.ObjectContracts;
 
 /**
@@ -303,7 +307,7 @@ public abstract class FixtureScripts extends AbstractService {
         // if this method is called programmatically, the caller may have simply new'd up the fixture script
         // (rather than use container.newTransientInstance(...).  To allow this use case, we need to ensure that
         // domain services are injected into the fixture script.
-        container.injectServicesInto(fixtureScript);
+        serviceRegistry.injectServicesInto(fixtureScript);
 
         return runScript(fixtureScript, parameters);
     }
@@ -404,12 +408,12 @@ public abstract class FixtureScripts extends AbstractService {
         if(object == null) {
             return null;
         }
-        if (object instanceof ViewModel || container.isPersistent(object)) {
+        if (object instanceof ViewModel || repositoryService.isPersistent(object)) {
             // continue
         } else {
             switch(getNonPersistedObjectsStrategy()) {
                 case PERSIST:
-                    container.flush();
+                    transactionService.flushTransaction();
                     break;
                 case IGNORE:
                     return null;
@@ -446,6 +450,15 @@ public abstract class FixtureScripts extends AbstractService {
     BookmarkService bookmarkService;
 
     @javax.inject.Inject
+    ServiceRegistry serviceRegistry;
+
+    @javax.inject.Inject
+    RepositoryService repositoryService;
+
+    @javax.inject.Inject
+    TransactionService transactionService;
+
+    @javax.inject.Inject
     ClassDiscoveryService classDiscoveryService;
 
     @javax.inject.Inject
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index 7d976a0..a1f97e7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -40,6 +40,10 @@ public class Bookmark implements Serializable {
 
     protected static final char SEPARATOR = ':';
 
+    public static Bookmark create(final String str) {
+        return str != null? new Bookmark(str): null;
+    }
+
     public OidDto toOidDto() {
         final OidDto oidDto = new OidDto();
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
index 802a89d..b3d218e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
@@ -27,9 +27,9 @@ import javax.annotation.PreDestroy;
 
 import com.google.common.collect.Lists;
 
-import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
 
 /**
  * Convenience implementation of {@link ExceptionRecognizer} that loops through a list of
@@ -141,9 +141,9 @@ public class ExceptionRecognizerComposite implements ExceptionRecognizer2 {
     }
 
     protected void injectServices() {
-        if(container != null) {
+        if(serviceRegistry != null) {
             for (final ExceptionRecognizer ers : exceptionRecognizers) {
-                container.injectServicesInto(ers);
+                serviceRegistry.injectServicesInto(ers);
             }
         }
     }
@@ -168,7 +168,7 @@ public class ExceptionRecognizerComposite implements ExceptionRecognizer2 {
     // //////////////////////////////////////
 
     @javax.inject.Inject
-    DomainObjectContainer container;
+    ServiceRegistry serviceRegistry;
     @javax.inject.Inject
     TranslationService translationService;
 
diff --git a/core/applib/src/main/java/org/apache/isis/schema/services/jaxb/JaxbServiceDefault.java b/core/applib/src/main/java/org/apache/isis/schema/services/jaxb/JaxbServiceDefault.java
index a6072b8..8e1beef 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/services/jaxb/JaxbServiceDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/services/jaxb/JaxbServiceDefault.java
@@ -19,10 +19,10 @@ package org.apache.isis.schema.services.jaxb;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.schema.utils.jaxbadapters.PersistentEntityAdapter;
 
 @DomainService(
@@ -33,17 +33,17 @@ public class JaxbServiceDefault extends JaxbService.Simple {
 
     protected void configure(final Unmarshaller unmarshaller) {
         final PersistentEntityAdapter adapter = new PersistentEntityAdapter();
-        container.injectServicesInto(adapter);
+        serviceRegistry.injectServicesInto(adapter);
         unmarshaller.setAdapter(PersistentEntityAdapter.class, adapter);
     }
 
     protected void configure(final Marshaller marshaller) {
         final PersistentEntityAdapter adapter = new PersistentEntityAdapter();
-        container.injectServicesInto(adapter);
+        serviceRegistry.injectServicesInto(adapter);
         marshaller.setAdapter(PersistentEntityAdapter.class, adapter);
     }
 
     @javax.inject.Inject
-    DomainObjectContainer container;
+    ServiceRegistry serviceRegistry;
 }
 
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java
index e91f111..68b9aff 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java
@@ -19,13 +19,16 @@
 package org.apache.isis.applib.services.exceprecog;
 
 import java.util.Map;
+
 import org.jmock.auto.Mock;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.apache.isis.applib.DomainObjectContainer;
+
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
@@ -56,7 +59,7 @@ public class ExceptionRecognizerCompositeTest {
     public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
     @Mock
-    private DomainObjectContainer mockContainer;
+    private ServiceRegistry mockServiceRegistry;
 
     @Mock
     private TranslationService mockTranslationService;
@@ -64,10 +67,10 @@ public class ExceptionRecognizerCompositeTest {
     @Before
     public void setUp() throws Exception {
         composite = new ExceptionRecognizerComposite();
-        composite.container = mockContainer;
+        composite.serviceRegistry = mockServiceRegistry;
         composite.translationService = mockTranslationService;
 
-        context.ignoring(mockContainer);
+        context.ignoring(mockServiceRegistry);
         context.ignoring(mockTranslationService);
     }
     
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
index 935577d..7de3f00 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.fixtures.FixtureClock;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.scratchpad.Scratchpad;
 import org.apache.isis.applib.services.sessmgmt.SessionManagementService;
@@ -186,7 +187,7 @@ public abstract class IntegrationTestAbstract {
      * Convenience method
      */
     protected <T> T mixin(final Class<T> mixinClass, final Object mixedIn) {
-        return container().mixin(mixinClass, mixedIn);
+        return service(FactoryService.class).mixin(mixinClass, mixedIn);
     }
 
     
@@ -208,7 +209,7 @@ public abstract class IntegrationTestAbstract {
             return new Statement() {
                 @Override
                 public void evaluate() throws Throwable {
-                    isft.getContainer().injectServicesInto(target);
+                    isft.getIsisSessionFactory().getServicesInjector().injectServicesInto(target);
                     isft.beginTran();
                     try {
                         base.evaluate();
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index f9afd98..ce93a63 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -344,10 +344,6 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
         }
     }
 
-    public DomainObjectContainer getContainer() {
-        return getService(DomainObjectContainer.class);
-    }
-
     //endregion
 
     //region > isisSystem (populated during setup)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index 9687c0e..907df32 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -34,7 +34,6 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType;
-import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
@@ -85,7 +84,7 @@ public class DomainObjectContainerDefault
             throw new IllegalArgumentException("Must specify a reference for disposing an object");
         }
         final ObjectAdapter adapter = persistenceSessionServiceInternal.adapterFor(unwrapped(persistentObject));
-        if (!isPersistent(persistentObject)) {
+        if (!repositoryService.isPersistent(persistentObject)) {
             throw new RepositoryException("Object not persistent: " + adapter);
         }
 
@@ -206,7 +205,7 @@ public class DomainObjectContainerDefault
             // TODO check aggregation is supported
             return;
         }
-        if (isPersistent(domainObject)) {
+        if (repositoryService.isPersistent(domainObject)) {
             throw new PersistFailedException("Object already persistent; OID=" + adapter.getOid());
         }
         persistenceSessionServiceInternal.makePersistent(adapter);
@@ -292,6 +291,9 @@ public class DomainObjectContainerDefault
     ServiceRegistry serviceRegistry;
 
     @javax.inject.Inject
+    RepositoryService repositoryService;
+
+    @javax.inject.Inject
     WrapperFactory wrapperFactory;
 
     @javax.inject.Inject
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
index 3bcd2a5..c61a353 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -34,7 +34,6 @@ import com.google.common.io.Resources;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
@@ -42,6 +41,7 @@ import org.apache.isis.applib.layout.component.Grid;
 import org.apache.isis.applib.services.grid.GridLoaderService;
 import org.apache.isis.applib.services.grid.GridSystemService;
 import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
 
 @DomainService(
@@ -148,7 +148,7 @@ public class GridLoaderServiceDefault implements GridLoaderService {
             final String resourceName = resourceNameFor(domainClass);
             final String message = "Failed to parse " + resourceName + " file (" + ex.getMessage() + ")";
             if(supportsReloading()) {
-                container.warnUser(message);
+                messageService.warnUser(message);
             }
             LOG.warn(message);
 
@@ -190,7 +190,7 @@ public class GridLoaderServiceDefault implements GridLoaderService {
     DeploymentCategoryProvider deploymentCategoryProvider;
 
     @javax.inject.Inject
-    DomainObjectContainer container;
+    MessageService messageService;
 
     @javax.inject.Inject
     JaxbService jaxbService;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
index e81b08f..ca1a1e2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
@@ -186,43 +186,43 @@ public class ApplicationFeatureRepositoryDefaultTest {
             // then
             final Sequence sequence = context.sequence("loadSequence");
             context.checking(new Expectations() {{
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newClass(Bar.class.getName()))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someProperty"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someCollection"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someAction"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newPackage("org.isisaddons.module.security.dom.feature"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newPackage("org.isisaddons.module.security.dom"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newPackage("org.isisaddons.module.security"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newPackage("org.isisaddons.module"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newPackage("org.isisaddons"))));
 
-                oneOf(mockContainer).newTransientInstance(ApplicationFeature.class);
+                oneOf(mockFactoryService).instantiate(ApplicationFeature.class);
                 inSequence(sequence);
                 will(returnValue(new ApplicationFeature(ApplicationFeatureId.newPackage("org"))));
             }});
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProvider.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProvider.java
index ca73bd5..0ee22ef 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProvider.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProvider.java
@@ -30,8 +30,6 @@ import org.apache.isis.applib.DomainObjectContainer;
  */
 public interface DomainServiceProvider {
 
-    public abstract DomainObjectContainer getContainer();
-
     public abstract <T> T getService(Class<T> serviceClass);
 
     /**
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
index 4d4d2cd..65e8c41 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
@@ -18,18 +18,24 @@ package org.apache.isis.core.specsupport.scenarios;
 
 import java.util.Map;
 import java.util.Set;
+
 import com.google.common.collect.Maps;
+
 import org.hamcrest.Description;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.api.Action;
 import org.jmock.api.Invocation;
+
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.services.factory.FactoryService;
+import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.core.unittestsupport.jmocking.JavassistImposteriser;
 
 class DomainServiceProviderMockery implements DomainServiceProvider {
 
-    private DomainObjectContainer mockContainer = null;
+    private RepositoryService mockRepositoryService = null;
+    private FactoryService mockFactoryService = null;
     private final Map<Class<?>, Object> mocks = Maps.newHashMap();
     
     private Mockery context;
@@ -47,42 +53,51 @@ class DomainServiceProviderMockery implements DomainServiceProvider {
         mocks.clear();
     }
 
+
+    @SuppressWarnings("unchecked")
     @Override
-    public DomainObjectContainer getContainer() {
-        if(mockContainer == null) {
-            mockContainer = getService(DomainObjectContainer.class);
+    public <T> T getService(Class<T> serviceClass) {
+        Object mock = doGetService(serviceClass);
+
+        if(FactoryService.class.isAssignableFrom(serviceClass)) {
+            mockFactoryService = (FactoryService) mock;
+
             context.checking(new Expectations() {
                 {
-                    allowing(mockContainer).newTransientInstance(with(Expectations.<Class<?>>anything()));
+                    allowing(mockFactoryService).instantiate(with(Expectations.<Class<?>>anything()));
                     will(new Action() {
-                        
+
                         @SuppressWarnings("rawtypes")
                         public Object invoke(Invocation invocation) throws Throwable {
                             Class cls = (Class) invocation.getParameter(0);
                             return scenarioExecution.injectServices(cls.newInstance());
                         }
-                        
+
                         public void describeTo(Description description) {
                             description.appendText("newTransientInstance");
                         }
                     });
-                    
-                    allowing(mockContainer).persistIfNotAlready(with(anything()));
                 }
             });
         }
-        return mockContainer;
+        if(RepositoryService.class.isAssignableFrom(serviceClass)) {
+            mockRepositoryService = (RepositoryService) mock;
+            context.checking(new Expectations() {
+                {
+                    allowing(mockRepositoryService).persist(with(anything()));
+                }
+            });
+        }
+        return (T) mock;
     }
 
-    @SuppressWarnings("unchecked")
-    @Override
-    public <T> T getService(Class<T> serviceClass) {
+    protected <T> Object doGetService(final Class<T> serviceClass) {
         Object mock = mocks.get(serviceClass);
         if(mock == null) {
             mock = context.mock(serviceClass);
         }
         mocks.put(serviceClass, mock);
-        return (T) mock;
+        return mock;
     }
 
     @Override
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
index 511e3cb..eba5761 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
@@ -147,12 +147,7 @@ public abstract class ScenarioExecution {
      * @throws IllegalStateException if not available
      */
     public DomainObjectContainer container() {
-        final DomainObjectContainer container = dsp.getContainer();
-        if(container == null) {
-            throw new IllegalStateException(
-                    "No DomainObjectContainer available");
-        }
-        return container;
+        return service(DomainObjectContainer.class);
     }
 
     

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.