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 2013/11/23 23:36:31 UTC

git commit: ISIS-597: session now open during service initialization.

Updated Branches:
  refs/heads/master acff08835 -> cd586fef6


ISIS-597: session now open during service initialization.

Also changes to example app isis.properties to ensure that RegisterEntities
is called first as a service (make sure that JDO metamodel is initialized)


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

Branch: refs/heads/master
Commit: cd586fef69722ac9143302a91683f84a1d7b8069
Parents: acff088
Author: Dan Haywood <da...@apache.org>
Authored: Sat Nov 23 22:36:15 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Sat Nov 23 22:36:15 2013 +0000

----------------------------------------------------------------------
 .../specloader/ObjectReflectorDefault.java      | 25 -------
 .../specloader/ServiceInitializer.java          | 21 +-----
 .../specloader/ServiceInitializerTest.java      | 14 ++--
 .../system/IsisSystemFixturesHookAbstract.java  | 73 ++++++++++++++++++++
 .../system/session/IsisSessionFactory.java      |  2 +
 .../session/IsisSessionFactoryDefault.java      |  3 +
 .../src/main/webapp/WEB-INF/isis.properties     |  3 +-
 .../src/main/java/dom/simple/SimpleObjects.java |  9 +++
 .../src/main/webapp/WEB-INF/isis.properties     |  3 +-
 9 files changed, 101 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 03d15db..8993f67 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -23,7 +23,6 @@ import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -31,9 +30,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -50,10 +46,8 @@ import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ClassUtil;
-import org.apache.isis.core.commons.lang.MethodExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
-import org.apache.isis.core.metamodel.adapter.ServicesProviderAbstract;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -278,8 +272,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         facetProcessor.init();
         metaModelValidator.init();
 
-        initServices(configuration);
-
         primeCache();
         
         ValidationFailures validationFailures = new ValidationFailures();
@@ -343,8 +335,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     public void shutdown() {
         LOG.info("shutting down " + this);
 
-        shutdownServices();
-
         getCache().clear();
         facetDecoratorSet.shutdown();
     }
@@ -369,21 +359,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     }
 
     
-    // /////////////////////////////////////////////////////////////
-    // init services, destroy services
-    // /////////////////////////////////////////////////////////////
-
-    protected void initServices(IsisConfiguration configuration) {
-        final List<Object> services = getServices();
-        serviceInitializer.init(configuration, container, services);
-        serviceInitializer.postConstruct();
-    }
-
-
-    protected void shutdownServices() {
-        serviceInitializer.preDestroy();
-    }
-
 
     // /////////////////////////////////////////////////////////////
     // install, load, allSpecifications, lookup

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
index b65d490..281b870 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
@@ -33,9 +33,9 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.MethodExtensions;
 import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 
-class ServiceInitializer {
+public class ServiceInitializer {
 
-    private final static Logger LOG = LoggerFactory.getLogger(ObjectReflectorDefault.class);
+    private final static Logger LOG = LoggerFactory.getLogger(ServiceInitializer.class);
 
     private Map<String, String> props;
     
@@ -50,22 +50,7 @@ class ServiceInitializer {
 
     // //////////////////////////////////////
 
-    ServiceInitializer() {
-    }
-    
-    public void init(final IsisConfiguration configuration, DomainObjectContainer container, final List<Object> services) {
-        
-        // all a bit hacky... :-(
-        // (a) newing up a new ServicesInjector
-        // (b) the guard, because of insufficient mock expectations in unit tests :-(
-        if (container == null || services == null) {
-            return;
-        } 
-        final ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault();
-        servicesInjector.setContainer(container);
-        servicesInjector.setServices(services);
-        servicesInjector.init();
-
+    public void validate(final IsisConfiguration configuration, DomainObjectContainer container, final List<Object> services) {
         
         this.props = configuration.asMap();
         

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
index df2b1a3..a1940a4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
@@ -102,7 +102,7 @@ public class ServiceInitializerTest {
     public void postConstruct() {
         final DomainServiceWithPostConstruct d1 = new DomainServiceWithPostConstruct();
         final DomainServiceWithPostConstructWithProperties d2 = new DomainServiceWithPostConstructWithProperties();
-        serviceInitializer.init(configuration, container, listOf(d1, d2));
+        serviceInitializer.validate(configuration, container, listOf(d1, d2));
         serviceInitializer.postConstruct();
         assertThat(d1.called, is(true));
         assertThat(d2.called, is(true));
@@ -122,7 +122,7 @@ public class ServiceInitializerTest {
     public void preDestroy() {
         final DomainServiceWithPreDestroy d1 = new DomainServiceWithPreDestroy();
         final DomainServiceWithPreDestroy d2 = new DomainServiceWithPreDestroy();
-        serviceInitializer.init(configuration, container, listOf(d1, d2));
+        serviceInitializer.validate(configuration, container, listOf(d1, d2));
         serviceInitializer.preDestroy();
         assertThat(d1.called, is(true));
         assertThat(d2.called, is(true));
@@ -146,7 +146,7 @@ public class ServiceInitializerTest {
         expectedException.expectMessage(
                 containsString(
                 "Found more than one @PostConstruct method; service is: org.apache.isis.core.metamodel.specloader.ServiceInitializerTest$DomainServiceWithMultiplePostConstruct, found"));
-        serviceInitializer.init(configuration, container, listOf(d1));
+        serviceInitializer.validate(configuration, container, listOf(d1));
     }
 
     public static class DomainServiceWithMultiplePreDestroy {
@@ -167,7 +167,7 @@ public class ServiceInitializerTest {
         expectedException.expectMessage(
                 containsString(
                 "Found more than one @PreDestroy method; service is: org.apache.isis.core.metamodel.specloader.ServiceInitializerTest$DomainServiceWithMultiplePreDestroy, found"));
-        serviceInitializer.init(configuration, container, listOf(d1));
+        serviceInitializer.validate(configuration, container, listOf(d1));
     }
 
     public static class DomainServiceWithPostConstructOneArgWrongType {
@@ -183,7 +183,7 @@ public class ServiceInitializerTest {
         final DomainServiceWithPostConstructOneArgWrongType d1 = new DomainServiceWithPostConstructOneArgWrongType();
         expectedException.expectMessage(
                 "@PostConstruct method must be no-arg or 1-arg accepting java.util.Map; method is: org.apache.isis.core.metamodel.specloader.ServiceInitializerTest$DomainServiceWithPostConstructOneArgWrongType#y");
-        serviceInitializer.init(configuration, container, listOf(d1));
+        serviceInitializer.validate(configuration, container, listOf(d1));
     }
 
     public static class DomainServiceWithPostConstructTwoArgs {
@@ -199,7 +199,7 @@ public class ServiceInitializerTest {
         final DomainServiceWithPostConstructTwoArgs d1 = new DomainServiceWithPostConstructTwoArgs();
         expectedException.expectMessage(
                 "@PostConstruct method must be no-arg or 1-arg accepting java.util.Map; method is: org.apache.isis.core.metamodel.specloader.ServiceInitializerTest$DomainServiceWithPostConstructTwoArgs#y");
-        serviceInitializer.init(configuration, container, listOf(d1));
+        serviceInitializer.validate(configuration, container, listOf(d1));
     }
 
     public static class DomainServiceWithPreDestroyOneArgs {
@@ -216,7 +216,7 @@ public class ServiceInitializerTest {
         final DomainServiceWithPreDestroyOneArgs d1 = new DomainServiceWithPreDestroyOneArgs();
         expectedException.expectMessage(
                 "@PreDestroy method must be no-arg; method is: org.apache.isis.core.metamodel.specloader.ServiceInitializerTest$DomainServiceWithPreDestroyOneArgs#y");
-        serviceInitializer.init(configuration, container, listOf(d1));
+        serviceInitializer.validate(configuration, container, listOf(d1));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
index 4f0d687..a3aebc9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
@@ -35,7 +35,9 @@ import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.facetapi.ClassSubstitutorFactory;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.specloader.ServiceInitializer;
 import org.apache.isis.core.runtime.about.AboutIsis;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authentication.exploration.ExplorationSession;
@@ -45,12 +47,14 @@ import org.apache.isis.core.runtime.imageloader.awt.TemplateImageLoaderAwt;
 import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
 import org.apache.isis.core.runtime.persistence.PersistenceConstants;
 import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.internal.InitialisationSession;
 import org.apache.isis.core.runtime.system.internal.IsisLocaleInitializer;
 import org.apache.isis.core.runtime.system.internal.IsisTimeZoneInitializer;
 import org.apache.isis.core.runtime.system.internal.SplashWindow;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 import org.apache.isis.core.runtime.system.session.IsisSession;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManagerException;
 import org.apache.isis.core.runtime.userprofile.UserProfileStore;
 
 /**
@@ -73,6 +77,8 @@ public abstract class IsisSystemFixturesHookAbstract implements IsisSystem {
 
     private IsisSessionFactory sessionFactory;
 
+    private ServiceInitializer serviceInitializer;
+
     // ///////////////////////////////////////////
     // Constructors
     // ///////////////////////////////////////////
@@ -132,6 +138,8 @@ public abstract class IsisSystemFixturesHookAbstract implements IsisSystem {
             initContext(sessionFactory);
             sessionFactory.init();
 
+            serviceInitializer = initializeServices();
+
             installFixturesIfRequired();
 
         } catch (final IsisSystemException ex) {
@@ -147,12 +155,77 @@ public abstract class IsisSystemFixturesHookAbstract implements IsisSystem {
         getDeploymentType().initContext(sessionFactory);
     }
 
+    /**
+     * @see #shutdownServices(ServiceInitializer)
+     */
+    private ServiceInitializer initializeServices() {
+
+        final DomainObjectContainer container = sessionFactory.getContainer();
+        final List<Object> services = sessionFactory.getServices();
+        
+        // autowire
+        final ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault();
+        servicesInjector.setContainer(container);
+        servicesInjector.setServices(services);
+        servicesInjector.init();
+
+        // validate 
+        final ServiceInitializer serviceInitializer = new ServiceInitializer();
+        serviceInitializer.validate(getConfiguration(), container, services);
+
+        // call @PostConstruct (in a session)
+        IsisContext.openSession(new InitialisationSession());
+        try {
+            IsisContext.getTransactionManager().startTransaction();
+            try {
+                serviceInitializer.postConstruct();
+                
+                return serviceInitializer;
+            } catch(RuntimeException ex) {
+                IsisContext.getTransactionManager().getTransaction().setAbortCause(new IsisTransactionManagerException(ex));
+                return serviceInitializer;
+            } finally {
+                // will commit or abort
+                IsisContext.getTransactionManager().endTransaction();
+            }
+        } finally {
+            IsisContext.closeSession();
+        }
+    }
+
+
     @Override
     public void shutdown() {
         LOG.info("shutting down system");
+        
+        shutdownServices(this.serviceInitializer);
+        
         IsisContext.closeAllSessions();
     }
 
+    /**
+     * @see #initializeServices()
+     */
+    private void shutdownServices(final ServiceInitializer serviceInitializer) {
+        
+        // call @PostDestroy (in a session)
+        IsisContext.openSession(new InitialisationSession());
+        try {
+            IsisContext.getTransactionManager().startTransaction();
+            try {
+                serviceInitializer.preDestroy();
+                
+            } catch(RuntimeException ex) {
+                IsisContext.getTransactionManager().getTransaction().setAbortCause(new IsisTransactionManagerException(ex));
+            } finally {
+                // will commit or abort
+                IsisContext.getTransactionManager().endTransaction();
+            }
+        } finally {
+            IsisContext.closeSession();
+        }
+    }
+    
     // ///////////////////////////////////////////
     // Hook:
     // ///////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
index 50f4ea8..3df53ac 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtime.system.session;
 
 import java.util.List;
 
+import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -94,6 +95,7 @@ public interface IsisSessionFactory extends ApplicationScopedComponent {
 
     public UserProfileLoader getUserProfileLoader();
 
+    public DomainObjectContainer getContainer();
     public List<Object> getServices();
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
index 3eef909..8d6b321 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
@@ -299,6 +299,9 @@ public class IsisSessionFactoryDefault implements IsisSessionFactory {
         return userProfileLoader;
     }
 
+    public DomainObjectContainer getContainer() {
+        return container;
+    }
     @Override
     public List<Object> getServices() {
         return serviceList;

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
index b947bd2..98bddb4 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -158,6 +158,8 @@ isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i
 
 #isis.services.prefix = 
 isis.services = \
+                0:org.apache.isis.objectstore.jdo.service.RegisterEntities,\
+                \
                 10:dom.todo.ToDoItems,\
                 20:app.ToDoItemAnalysis,\
                 dom.todo.ToDoItemContributions,\
@@ -171,7 +173,6 @@ isis.services = \
                 org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault,\
                 org.apache.isis.core.runtime.services.viewmodelsupport.ViewModelSupportDefault, \
                 org.apache.isis.core.runtime.services.xmlsnapshot.XmlSnapshotServiceDefault,\
-                org.apache.isis.objectstore.jdo.service.RegisterEntities,\
                 org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl,\
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
                 org.apache.isis.viewer.restfulobjects.rendering.eventserializer.RestfulObjectsSpecEventSerializer,\

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java b/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
index 13cd192..8270652 100644
--- a/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
+++ b/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
@@ -19,6 +19,9 @@
 package dom.simple;
 
 import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
 
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.ActionSemantics;
@@ -29,6 +32,12 @@ import org.apache.isis.applib.annotation.Named;
 
 public class SimpleObjects {
 
+    @PostConstruct
+    public void init(Map<String,String> props) {
+        List<SimpleObject> x = container.allInstances(SimpleObject.class);
+        System.out.println(x);
+    }
+
     // //////////////////////////////////////
     // Identification in the UI
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/cd586fef/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
index cb633bf..3944f0f 100644
--- a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -158,6 +158,8 @@ isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i
 
 #isis.services.prefix = 
 isis.services = \
+                0:org.apache.isis.objectstore.jdo.service.RegisterEntities,\
+                \
                 10:dom.simple.SimpleObjects,\
                 services.ClockService,\
                 \
@@ -167,7 +169,6 @@ isis.services = \
                 org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault,\
                 org.apache.isis.core.runtime.services.viewmodelsupport.ViewModelSupportDefault, \
                 org.apache.isis.core.runtime.services.xmlsnapshot.XmlSnapshotServiceDefault,\
-                org.apache.isis.objectstore.jdo.service.RegisterEntities,\
                 org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl,\
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
                 org.apache.isis.viewer.restfulobjects.rendering.eventserializer.RestfulObjectsSpecEventSerializer,\