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/02/14 15:13:08 UTC

[18/20] isis git commit: ISIS-1582: generalizes checking for unique objectTypes to be unique across entities and domain services.

ISIS-1582: generalizes checking for unique objectTypes to be unique across entities and domain services.


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

Branch: refs/heads/master
Commit: 78f034d0ecb7b6a7fce99a0904ee3e0b890e3e9d
Parents: 5a3029e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Feb 14 14:46:06 2017 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Feb 14 14:46:06 2017 +0000

----------------------------------------------------------------------
 .../config/ConfigurationServiceMenu.java        |  5 +-
 .../services/layout/LayoutServiceMenu.java      |  4 +-
 .../metamodel/MetaModelServicesMenu.java        |  4 +-
 .../services/swagger/SwaggerServiceMenu.java    |  5 +-
 .../ObjectSpecIdFacetDerivedFromClassName.java  |  3 +
 ...tSpecIdFacetDerivedFromClassNameFactory.java | 60 ++++++++++++++++----
 ...vedFromDomainServiceAnnotationElseGetId.java |  5 +-
 .../core/metamodel/services/ServiceUtil.java    |  2 +-
 .../metamodel/services/ServiceUtil_Test.java    |  5 +-
 .../i18n/po/TranslationServicePoMenu.java       |  5 +-
 .../wicket/WebRequestCycleForIsis.java          |  2 +-
 ...nAppFixtureScriptsSpecificationProvider.java |  4 +-
 .../services/dbmanager/HsqlDbManagerMenu.java   |  3 +-
 .../services/homepage/HomePageService.java      |  3 +-
 14 files changed, 77 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java
index ba9f75d..d61e787 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java
@@ -21,8 +21,6 @@ package org.apache.isis.applib.services.config;
 
 import java.util.Set;
 
-import javax.inject.Inject;
-
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -33,7 +31,8 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "isisApplib.ConfigurationServiceMenu"
 )
 @DomainServiceLayout(
         menuBar = DomainServiceLayout.MenuBar.TERTIARY,

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
index da5d637..a038f25 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
@@ -18,7 +18,6 @@ package org.apache.isis.applib.services.layout;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
-import javax.inject.Inject;
 
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
@@ -32,7 +31,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Blob;
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "isisApplib.LayoutServiceMenu"
 )
 @DomainServiceLayout(
         named = "Prototyping",

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
index dd6ec05..3a0e242 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
@@ -22,7 +22,6 @@ import java.util.List;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
-import javax.inject.Inject;
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
@@ -40,7 +39,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Clob;
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "isisApplib.MetaModelServicesMenu"
 )
 @DomainServiceLayout(
         named = "Prototyping",

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
index 73f766f..2996a81 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
@@ -16,8 +16,6 @@
  */
 package org.apache.isis.applib.services.swagger;
 
-import javax.inject.Inject;
-
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -32,7 +30,8 @@ import org.apache.isis.applib.value.Clob;
 
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "isisApplib.SwaggerServiceMenu"
 )
 @DomainServiceLayout(
         named = "Prototyping",

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassName.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassName.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassName.java
index 547c65a..dba2248 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassName.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassName.java
@@ -24,6 +24,9 @@ import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFac
 
 public class ObjectSpecIdFacetDerivedFromClassName extends ObjectSpecIdFacetAbstract {
 
+    public ObjectSpecIdFacetDerivedFromClassName(final Class<?> cls, final FacetHolder holder) {
+        this(cls.getCanonicalName(), holder);
+    }
     public ObjectSpecIdFacetDerivedFromClassName(final String value, final FacetHolder holder) {
         super(value, holder);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
index 29b011e..e6ccf72 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
@@ -19,14 +19,21 @@
 
 package org.apache.isis.core.metamodel.facets.object.objectspecid.classname;
 
+import java.util.List;
+
+import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
@@ -57,22 +64,27 @@ public class ObjectSpecIdFacetDerivedFromClassNameFactory extends FacetFactoryAb
         final Class<?> originalClass = processClassContaxt.getCls();
         final Class<?> substitutedClass = classSubstitutor.getClass(originalClass);
 
-        final boolean isService = isService(facetHolder);
-        ObjectSpecIdFacet objectSpecIdFacet = isService
-                ? new ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId(substitutedClass, facetHolder)
-                : new ObjectSpecIdFacetDerivedFromClassName(substitutedClass.getCanonicalName(), facetHolder);
+        ObjectSpecIdFacet objectSpecIdFacet = createObjectSpecIdFacet(facetHolder, substitutedClass);
         FacetUtil.addFacet(objectSpecIdFacet);
     }
 
-    private boolean isService(final FacetHolder facetHolder) {
-        boolean service;
+    private static ObjectSpecIdFacet createObjectSpecIdFacet(final FacetHolder facetHolder, final Class<?> substitutedClass) {
+        final boolean isService = isService(facetHolder);
+        if (isService) {
+            final String id = ServiceUtil.id(substitutedClass);
+            if (id != null) {
+                return new ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId(id, facetHolder);
+            }
+        }
+        return new ObjectSpecIdFacetDerivedFromClassName(substitutedClass, facetHolder);
+    }
+
+    private static boolean isService(final FacetHolder facetHolder) {
         if(facetHolder instanceof ObjectSpecification) {
             ObjectSpecification objectSpecification = (ObjectSpecification) facetHolder;
-            service = objectSpecification.isService();
-        } else {
-            service = false;
+            return objectSpecification.isService();
         }
-        return service;
+        return false;
     }
 
     @Override
@@ -99,7 +111,7 @@ public class ObjectSpecIdFacetDerivedFromClassNameFactory extends FacetFactoryAb
                     private void validate(
                             final ObjectSpecification objectSpec,
                             final ValidationFailures validationFailures) {
-                        if(!objectSpec.isPersistenceCapable()) {
+                        if(skip(objectSpec)) {
                             return;
                         }
                         ObjectSpecIdFacet objectSpecIdFacet = objectSpec.getFacet(ObjectSpecIdFacet.class);
@@ -109,6 +121,32 @@ public class ObjectSpecIdFacetDerivedFromClassNameFactory extends FacetFactoryAb
                                     objectSpec.getFullIdentifier(), ISIS_REFLECTOR_VALIDATOR_EXPLICIT_OBJECT_TYPE_KEY);
                         }
                     }
+
+                    private boolean skip(final ObjectSpecification objectSpec) {
+                        return !check(objectSpec);
+                    }
+
+                    private boolean check(final ObjectSpecification objectSpec) {
+                        if (objectSpec.isPersistenceCapable()) {
+                            return true;
+                        }
+                        if (objectSpec.isService()) {
+                            // don't care about domain services.
+                            DomainServiceFacet domainServiceFacet = objectSpec.getFacet(DomainServiceFacet.class);
+                            if(domainServiceFacet != null && domainServiceFacet.getNatureOfService() == NatureOfService.DOMAIN) {
+                                return false;
+                            }
+
+                            // we don't care about services that have only programmatic methods
+                            List<ObjectAction> objectActions = objectSpec.getObjectActions(Contributed.INCLUDED);
+                            if(objectActions.isEmpty()) {
+                                return false;
+                            }
+
+                            return true;
+                        }
+                        return false;
+                    }
                 });
         metaModelValidator.add(validator);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId.java
index 651a765..bd5ddde 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId.java
@@ -20,13 +20,14 @@
 package org.apache.isis.core.metamodel.facets.object.objectspecid.classname;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacetAbstract;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
 
 public class ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId extends ObjectSpecIdFacetAbstract {
 
-    public ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId(final Class<?> value, final FacetHolder holder) {
-        super(ServiceUtil.id(value), holder);
+    ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId(final String value, final FacetHolder holder) {
+        super(value, holder);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
index 956aadc..181fe59 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
@@ -42,7 +42,7 @@ public final class ServiceUtil {
             Object object = serviceClass.newInstance();
             return getIdOf(object);
         } catch (InstantiationException | IllegalAccessException | NoSuchMethodException e) {
-            return fqcnOf(serviceClass);
+            return null;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
index 895f879..e36282e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.annotation.DomainService;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 
 public class ServiceUtil_Test {
@@ -91,13 +92,13 @@ public class ServiceUtil_Test {
     }
 
     @Test
-    public void fallback_to_fqcn() throws Exception {
+    public void fallback_to_fqcn_for_obj_but_to_null_for_service() throws Exception {
         assertThat(
                 ServiceUtil.id(new SomeServiceWithoutAnnotationOrId()),
                 is(equalTo("org.apache.isis.core.metamodel.services.ServiceUtil_Test$SomeServiceWithoutAnnotationOrId")));
         assertThat(
                 ServiceUtil.id(SomeServiceWithoutAnnotationOrId.class),
-                is(equalTo("org.apache.isis.core.metamodel.services.ServiceUtil_Test$SomeServiceWithoutAnnotationOrId")));
+                is(nullValue()));
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
index 499cc7d..857bade 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.core.runtime.services.i18n.po;
 
-import javax.inject.Inject;
-
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -33,7 +31,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Clob;
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "isisApplib.TranslationServicePoMenu"
 )
 @DomainServiceLayout(
         named = "Prototyping",

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
index 7d5c9e6..cfb72fd 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
@@ -194,7 +194,7 @@ public class WebRequestCycleForIsis extends AbstractRequestCycleListener {
             new ExceptionRecognizerForType(PageExpiredException.class, new Function<String,String>(){
                 @Override
                 public String apply(String input) {
-                    return "Requested page is no longer available. Please navigate back to the home page or select an object from the bookmark bar.";
+                    return "Requested page is no longer available.";
                 }
             });
 

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
index 703c42f..3ce5ebf 100644
--- a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
+++ b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
@@ -29,7 +29,9 @@ import domainapp.application.fixture.scenarios.DomainAppDemo;
 /**
  * Specifies where to find fixtures, and other settings.
  */
-@DomainService(nature = NatureOfService.DOMAIN)
+@DomainService(
+        nature = NatureOfService.DOMAIN
+)
 public class DomainAppFixtureScriptsSpecificationProvider implements FixtureScriptsSpecificationProvider {
     @Override
     public FixtureScriptsSpecification getSpecification() {

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/example/application/simpleapp/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java b/example/application/simpleapp/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
index ab8397a..7d85cdc 100644
--- a/example/application/simpleapp/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
+++ b/example/application/simpleapp/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
@@ -35,7 +35,8 @@ import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "prototyping.HsqlDbManagerMenu"
 )
 @DomainServiceLayout(
         named = "Prototyping",

http://git-wip-us.apache.org/repos/asf/isis/blob/78f034d0/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageService.java b/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
index cb073ab..206488e 100644
--- a/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
+++ b/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
@@ -26,7 +26,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.factory.FactoryService;
 
 @DomainService(
-        nature = NatureOfService.DOMAIN // trick to suppress the actions from the top-level menu
+        nature = NatureOfService.DOMAIN, // trick to suppress the actions from the top-level menu
+        objectType = "internals.HomePageService"
 )
 public class HomePageService {