You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/11/03 15:25:05 UTC

[06/11] aries-jax-rs-whiteboard git commit: Handle error endpoint registration

Handle error endpoint registration


Project: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/commit/388fbfdb
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/388fbfdb
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/388fbfdb

Branch: refs/heads/master
Commit: 388fbfdb466d6cb28d97ef5a914cd618019f4f8c
Parents: 7126342
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Oct 30 08:32:01 2017 +0100
Committer: Carlos Sierra <cs...@apache.org>
Committed: Fri Nov 3 16:18:24 2017 +0100

----------------------------------------------------------------------
 .../internal/AriesJaxRSServiceRuntime.java      | 22 +++++++++++-
 .../jax/rs/whiteboard/internal/Whiteboard.java  | 38 +++++++++++++-------
 2 files changed, 46 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/388fbfdb/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java
index 1e72f6b..12d8fb2 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java
@@ -71,6 +71,8 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
         new CopyOnWriteArrayList<>();
     private Collection<ServiceReference<Application>> _erroredApplications =
         new CopyOnWriteArrayList<>();
+    private Collection<ServiceReference<?>> _erroredEndpoints =
+        new CopyOnWriteArrayList<>();
     private Collection<ServiceReference<?>> _ungettableEndpoints =
         new CopyOnWriteArrayList<>();
     private Collection<ServiceReference<?>> _ungettableExtensions =
@@ -118,6 +120,10 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
         _erroredApplications.add(serviceReference);
     }
 
+    public <T> void addErroredEndpoint(ServiceReference<T> serviceReference) {
+        _erroredEndpoints.add(serviceReference);
+    }
+
     public void addInvalidExtension(ServiceReference<?> serviceReference) {
         _invalidExtensions.add(serviceReference);
     }
@@ -203,7 +209,10 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
 
         runtimeDTO.failedResourceDTOs =
             Stream.concat(
-                unreferenciableEndpointsDTOStream(), dependentServiceStreamDTO()
+                unreferenciableEndpointsDTOStream(),
+                Stream.concat(
+                    dependentServiceStreamDTO(),
+                    erroredEndpointsStreamDTO())
             ).toArray(
                 FailedResourceDTO[]::new
             );
@@ -218,6 +227,13 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
         return runtimeDTO;
     }
 
+    private Stream<FailedResourceDTO> erroredEndpointsStreamDTO() {
+        return _erroredEndpoints.stream().map(
+            sr -> buildFailedResourceDTO(
+                DTOConstants.FAILURE_REASON_UNKNOWN, sr)
+        );
+    }
+
     public void removeApplicationEndpoint(
         String applicationName, ServiceReference<?> endpointServiceReference) {
 
@@ -254,6 +270,10 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
         _erroredApplications.remove(serviceReference);
     }
 
+    public <T> void removeErroredEndpoint(ServiceReference<T> serviceReference) {
+        _erroredEndpoints.remove(serviceReference);
+    }
+
     public void removeInvalidExtension(ServiceReference<?> serviceReference) {
         _invalidExtensions.remove(serviceReference);
     }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/388fbfdb/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
index 4324ada..0277965 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
@@ -476,20 +476,32 @@ public class Whiteboard {
                 _runtime::removeNotGettableEndpoint
             ).flatMap(
                 tuple -> serviceObjects(serviceReference).flatMap(
-                    serviceObjects -> registerEndpoint(
-                        registrator, serviceObjects).flatMap(
-                            resourceProvider ->
-                                onClose(
-                                    () -> Utils.unregisterEndpoint(
-                                        registrator, resourceProvider)
-                                )
-                    )
+                    serviceObjects -> {
+                        try {
+                            return registerEndpoint(
+                                registrator, serviceObjects).flatMap(
+                                resourceProvider ->
+                                    onClose(
+                                        () -> Utils.unregisterEndpoint(
+                                            registrator, resourceProvider)
+                                    ).effects(
+                                        __ -> _runtime.addApplicationEndpoint(
+                                            applicationName, serviceReference),
+                                        __ -> _runtime.removeApplicationEndpoint(
+                                            applicationName, serviceReference)
+                                    ));
+                        }
+                        catch (Exception e) {
+                            return
+                                just(serviceReference).
+                                effects(
+                                    _runtime::addErroredEndpoint,
+                                    _runtime::removeErroredEndpoint).
+                                then(nothing());
+                        }
+                    }
+
                 )
-            ).effects(
-                __ -> _runtime.addApplicationEndpoint(
-                    applicationName, serviceReference),
-                __ -> _runtime.removeApplicationEndpoint(
-                    applicationName, serviceReference)
             ));
     }