You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/01/05 13:03:12 UTC

[isis] branch master updated: ISIS-2183: removes some plugins (ServiceLoader)

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 3f28867  ISIS-2183: removes some plugins (ServiceLoader)
3f28867 is described below

commit 3f28867219f35b36515c306a3795038635a3d4c4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Jan 5 14:03:02 2020 +0100

    ISIS-2183: removes some plugins (ServiceLoader)
    
    - UriBuilderPlugin ... obsolete since UriBuilder provides the same
    functionality
    - IsisJaxrsServerPlugin ... converted to a managed bean (service)
---
 .../applib/client/ClientExecutor.java              |  3 +-
 .../applib/client/ClientRequestConfigurer.java     | 10 +++--
 .../applib/client/UriBuilderPlugin.java            | 43 ----------------------
 ....java => IsisJaxrsUtilityServiceResteasy4.java} | 19 ++++------
 .../IsisModuleRestfulObjectsJaxrsResteasy4.java    |  1 +
 ...wer.restfulobjects.viewer.IsisJaxrsServerPlugin |  1 -
 ...verPlugin.java => IsisJaxrsUtilityService.java} | 25 ++++---------
 .../viewer/IsisModuleRestfulObjectsViewer.java     |  2 +-
 .../viewer/mappers/ExceptionMapperAbstract.java    |  6 ++-
 .../mappers/ExceptionMapperForObjectNotFound.java  |  9 ++++-
 ...xceptionMapperForRestfulObjectsApplication.java | 14 +++++--
 .../ExceptionMapperForRuntimeException.java        |  9 +++++
 ...tsApplicationExceptionMapper_Test_Contract.java |  7 ++++
 .../demo/src/main/java/demoapp/webapp/DemoApp.java |  4 ++
 14 files changed, 67 insertions(+), 86 deletions(-)

diff --git a/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientExecutor.java b/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientExecutor.java
index dbcc870..b61bef8 100644
--- a/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientExecutor.java
+++ b/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientExecutor.java
@@ -39,6 +39,7 @@ public interface ClientExecutor {
     WebTarget webTarget(URI baseUri);
 
     static ClientExecutor of(final Client client) {
+        
         return new ClientExecutor() {
 
             @Override
@@ -55,7 +56,7 @@ public interface ClientExecutor {
 
                     // TODO [andi-huber] just a wild guess
                     private String method = "get";
-
+                    
                     @Override
                     public String getHttpMethod() {
                         return method;
diff --git a/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientRequestConfigurer.java b/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientRequestConfigurer.java
index 96b8779..d9262ce 100644
--- a/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientRequestConfigurer.java
+++ b/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/ClientRequestConfigurer.java
@@ -28,6 +28,8 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
 import org.apache.isis.viewer.restfulobjects.applib.util.UrlEncodingUtils;
 
+import lombok.val;
+
 /**
  * Configures the body, query string etc of a {@link ClientRequest}.
  *
@@ -42,10 +44,10 @@ public class ClientRequestConfigurer {
 
     public static ClientRequestConfigurer create(
             final ClientExecutor executor,
-            final String uriTemplate)
-    {
-        final UriBuilder uriBuilder = UriBuilderPlugin.get().uriTemplate(uriTemplate);
-        final ClientRequest clientRequest = executor.createRequest(uriBuilder);
+            final String uriTemplate) {
+        
+        val uriBuilder = UriBuilder.fromUri(uriTemplate);
+        val clientRequest = executor.createRequest(uriBuilder);
         return new ClientRequestConfigurer(clientRequest, uriBuilder);
     }
 
diff --git a/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/UriBuilderPlugin.java b/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/UriBuilderPlugin.java
deleted file mode 100644
index 2b5863b..0000000
--- a/core/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/UriBuilderPlugin.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.viewer.restfulobjects.applib.client;
-
-import javax.ws.rs.core.UriBuilder;
-
-import org.apache.isis.commons.internal.context._Plugin;
-
-public interface UriBuilderPlugin {
-
-    // -- INTERFACE
-
-    public UriBuilder uriTemplate(String uriTemplate);
-
-    // -- LOOKUP
-
-    public static UriBuilderPlugin get() {
-        return _Plugin.getOrElse(UriBuilderPlugin.class,
-                ambiguousPlugins->{
-                    throw _Plugin.ambiguityNonRecoverable(UriBuilderPlugin.class, ambiguousPlugins);
-                },
-                ()->{
-                    throw _Plugin.absenceNonRecoverable(UriBuilderPlugin.class);
-                });
-    }
-
-}
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisResteasy4Plugin.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisJaxrsUtilityServiceResteasy4.java
similarity index 73%
rename from core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisResteasy4Plugin.java
rename to core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisJaxrsUtilityServiceResteasy4.java
index fefffe1..13d8c98 100644
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisResteasy4Plugin.java
+++ b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisJaxrsUtilityServiceResteasy4.java
@@ -18,23 +18,18 @@
  */
 package org.apache.isis.viewer.restfulobjects.jaxrsresteasy4;
 
-import javax.ws.rs.core.UriBuilder;
-
-import org.jboss.resteasy.specimpl.ResteasyUriBuilderImpl;
 import org.jboss.resteasy.spi.Failure;
+import org.springframework.stereotype.Service;
 
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.applib.client.UriBuilderPlugin;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsServerPlugin;
-
-public class IsisResteasy4Plugin implements UriBuilderPlugin, IsisJaxrsServerPlugin {
-
-    @Override
-    public UriBuilder uriTemplate(String uriTemplate) {
-        return new ResteasyUriBuilderImpl().uriTemplate(uriTemplate);
-    }
+import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
 
+/**
+ * @since 2.0
+ */
+@Service
+public class IsisJaxrsUtilityServiceResteasy4 implements IsisJaxrsUtilityService {
 
     @Override
     public HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) {
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java
index c254076..5920701 100644
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java
+++ b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java
@@ -13,6 +13,7 @@ import org.apache.isis.viewer.restfulobjects.viewer.IsisModuleRestfulObjectsView
         IsisModuleRestfulObjectsViewer.class,
 
         // @Service's
+        IsisJaxrsUtilityServiceResteasy4.class,
         WebModuleJaxrsResteasy4.class,
 
         // @Component's
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/resources/META-INF/services/org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsServerPlugin b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/resources/META-INF/services/org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsServerPlugin
deleted file mode 100644
index 1dffdb1..0000000
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/resources/META-INF/services/org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsServerPlugin
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisResteasy4Plugin
\ No newline at end of file
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsServerPlugin.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsUtilityService.java
similarity index 60%
rename from core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsServerPlugin.java
rename to core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsUtilityService.java
index e889150..50b06f8 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsServerPlugin.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsUtilityService.java
@@ -18,26 +18,15 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer;
 
-import org.apache.isis.commons.internal.context._Plugin;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 
-// TODO: v2: to remove.
-public interface IsisJaxrsServerPlugin {
-
-    // -- INTERFACE
-
-    public HttpStatusCode getFailureStatusCodeIfAny(Throwable ex);
-
-    // -- LOOKUP
+/**
+ * Replaces the former 'IsisJaxrsServerPlugin'.
+ * 
+ * @since 2.0
+ */
+public interface IsisJaxrsUtilityService {
 
-    public static IsisJaxrsServerPlugin get() {
-        return _Plugin.getOrElse(IsisJaxrsServerPlugin.class,
-                ambiguousPlugins->{
-                    throw _Plugin.ambiguityNonRecoverable(IsisJaxrsServerPlugin.class, ambiguousPlugins);
-                },
-                ()->{
-                    throw _Plugin.absenceNonRecoverable(IsisJaxrsServerPlugin.class);
-                });
-    }
+    HttpStatusCode getFailureStatusCodeIfAny(Throwable ex);
 
 }
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisModuleRestfulObjectsViewer.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisModuleRestfulObjectsViewer.java
index 6af208a..e030782 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisModuleRestfulObjectsViewer.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisModuleRestfulObjectsViewer.java
@@ -47,7 +47,7 @@ import org.apache.isis.webapp.IsisModuleWebapp;
         // modules
         IsisModuleWebapp.class,
         IsisModuleRestfulObjectsRendering.class,
-
+        
         // @Component's
         HomePageResourceServerside.class,
         DomainTypeResourceServerside.class,
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java
index 696fb7e..61f34d0 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java
@@ -35,7 +35,7 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.rendering.ExceptionWithBody;
 import org.apache.isis.viewer.restfulobjects.rendering.ExceptionWithHttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsServerPlugin;
+import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
 import org.apache.isis.viewer.restfulobjects.viewer.mappers.entity.ExceptionDetail;
 import org.apache.isis.viewer.restfulobjects.viewer.mappers.entity.ExceptionPojo;
 import org.apache.isis.viewer.restfulobjects.viewer.resources.serialization.SerializationStrategy;
@@ -86,11 +86,13 @@ public abstract class ExceptionMapperAbstract<T extends Throwable> implements Ex
         return builder.build();
     }
 
+    protected abstract IsisJaxrsUtilityService getIsisJaxrsUtilityService();
+    
     private RestfulResponse.HttpStatusCode determineStatusCode(final T ex) {
 
         RestfulResponse.HttpStatusCode statusCode;
 
-        statusCode = IsisJaxrsServerPlugin.get().getFailureStatusCodeIfAny(ex);
+        statusCode = getIsisJaxrsUtilityService().getFailureStatusCodeIfAny(ex);
         if(statusCode!=null) {
             return statusCode;
         }
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java
index 2678a14..389d8dd 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java
@@ -18,20 +18,27 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.mappers;
 
+import javax.inject.Inject;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
 
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.metamodel.exceptions.persistence.ObjectNotFoundException;
+import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
+
+import lombok.AccessLevel;
+import lombok.Getter;
 
 @Component
 @Provider
 public class ExceptionMapperForObjectNotFound extends ExceptionMapperAbstract<ObjectNotFoundException> {
 
+    @Inject @Getter(onMethod = @__(@Override), value = AccessLevel.PROTECTED)
+    IsisJaxrsUtilityService isisJaxrsUtilityService;
+    
     @Override
     public Response toResponse(final ObjectNotFoundException ex) {
-
         return buildResponse(ex);
     }
 
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java
index f2b7fb8..7841ada 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java
@@ -18,22 +18,30 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.mappers;
 
+import javax.inject.Inject;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
 
 import org.springframework.stereotype.Component;
 
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
+
+import lombok.AccessLevel;
+import lombok.Getter;
 
 @Component
 @Provider
 public class ExceptionMapperForRestfulObjectsApplication extends ExceptionMapperAbstract<RestfulObjectsApplicationException> {
 
+    @Inject @Getter(onMethod = @__(@Override), value = AccessLevel.PROTECTED)
+    IsisJaxrsUtilityService isisJaxrsUtilityService;
+    
     @Override
     public Response toResponse(final RestfulObjectsApplicationException ex) {
-        final JsonRepresentation body = ex.getBody();
-        final String bodyStr = body != null ? body.toString() : null;
+        //XXX code not used, so commented out
+        //final JsonRepresentation body = ex.getBody();
+        //final String bodyStr = body != null ? body.toString() : null;
         return buildResponse(ex);
     }
 
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java
index 7aff4b2..ebc7ba2 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java
@@ -18,15 +18,24 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.mappers;
 
+import javax.inject.Inject;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
 
 import org.springframework.stereotype.Component;
 
+import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+
 @Component
 @Provider
 public class ExceptionMapperForRuntimeException extends ExceptionMapperAbstract<RuntimeException> {
 
+    @Inject @Getter(onMethod = @__(@Override), value = AccessLevel.PROTECTED)
+    IsisJaxrsUtilityService isisJaxrsUtilityService;
+    
     @Override
     public Response toResponse(final RuntimeException ex) {
 
diff --git a/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java b/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java
index 6476c01..caf3e5e 100644
--- a/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java
+++ b/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java
@@ -36,6 +36,7 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
 
 /**
  * contract test.
@@ -54,6 +55,12 @@ public abstract class RestfulObjectsApplicationExceptionMapper_Test_Contract {
     public void setUp() throws Exception {
         exceptionMapper = new ExceptionMapperForRestfulObjectsApplication();
         exceptionMapper.httpHeaders = mockHttpHeaders;
+        exceptionMapper.isisJaxrsUtilityService = new IsisJaxrsUtilityService() {
+            @Override
+            public HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) {
+                return null;
+            }
+        };
     }
 
     @Test
diff --git a/examples/demo/src/main/java/demoapp/webapp/DemoApp.java b/examples/demo/src/main/java/demoapp/webapp/DemoApp.java
index 25c8afb..b7bd88e 100644
--- a/examples/demo/src/main/java/demoapp/webapp/DemoApp.java
+++ b/examples/demo/src/main/java/demoapp/webapp/DemoApp.java
@@ -43,6 +43,7 @@ import org.apache.isis.extensions.sse.IsisModuleExtSse;
 import org.apache.isis.incubator.model.metamodel.IsisModuleIncModelMetaModel;
 import org.apache.isis.persistence.jdo.datanucleus5.IsisModuleJdoDataNucleus5;
 import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
+import org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisModuleRestfulObjectsJaxrsResteasy4;
 import org.apache.isis.viewer.restfulobjects.viewer.IsisModuleRestfulObjectsViewer;
 import org.apache.isis.viewer.wicket.viewer.IsisModuleWicketViewer;
 import org.apache.isis.webboot.springboot.IsisModuleSpringBoot;
@@ -91,7 +92,10 @@ public class DemoApp extends SpringBootServletInitializer {
         IsisModuleJdoDataNucleus5.class,
         IsisModuleWicketViewer.class,
         IsisModuleExtSse.class, // server sent events
+        
+        // REST
         IsisModuleRestfulObjectsViewer.class,
+        IsisModuleRestfulObjectsJaxrsResteasy4.class,
 
         // Security Manager Extension (secman)
         IsisModuleSecmanModel.class,