Repository: aries-jax-rs-whiteboard
Updated Branches:
  refs/heads/master bab1ff399 -> 4b959b585


Always use ServiceObjects to honor scope


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/5cb59cac
Tree: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/5cb59cac
Diff: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/5cb59cac

Branch: refs/heads/master
Commit: 5cb59cac93a88a4bbe6bfe2cd4f9f6777339220d
Parents: bab1ff3
Author: Carlos Sierra <[email protected]>
Authored: Tue Dec 5 16:34:57 2017 +0100
Committer: Carlos Sierra <[email protected]>
Committed: Thu Dec 7 11:52:27 2017 +0100

----------------------------------------------------------------------
 .../aries/jax/rs/whiteboard/internal/Utils.java | 60 +++++++++++++-------
 .../jax/rs/whiteboard/internal/Whiteboard.java  |  7 +--
 2 files changed, 44 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/5cb59cac/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
index 624310c..745abb1 100644
--- 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
@@ -134,34 +134,46 @@ public class Utils {
         Consumer<CachingServiceReference<T>> whenLeavingNotGettable) {
 
         return bundleContext().flatMap(bundleContext ->
-            program.flatMap(immutable -> {
-                T service = null;
+            program.recoverWith(
+                (serviceReference, e) ->
+                    notGettableResult(
+                        whenAddedNotGettable, whenLeavingNotGettable,
+                        serviceReference)
+            ).flatMap(serviceReference -> {
+                ServiceObjects<T> serviceObjects =
+                    bundleContext.getServiceObjects(
+                        serviceReference.getServiceReference());
+                T service = serviceObjects.getService();
 
-                try {
-                    service = bundleContext.getService(
-                        immutable.getServiceReference());
-                }
-                catch (Exception e){
-                }
                 if (service == null) {
-                    return
-                        effects(
-                            () -> whenAddedNotGettable.accept(immutable),
-                            () -> whenLeavingNotGettable.accept(immutable)
-                        ).then(
-                            nothing()
-                        );
+                    return notGettableResult(
+                        whenAddedNotGettable, whenLeavingNotGettable,
+                        serviceReference);
                 }
+
                 return
                     onClose(
-                        () -> bundleContext.ungetService(
-                            immutable.getServiceReference())
+                        () -> serviceObjects.ungetService(service)
                     ).then(
-                        just(new ServiceTuple<>(immutable, service))
+                        just(new ServiceTuple<>(
+                            serviceReference, serviceObjects, service))
                     );
             }));
     }
 
+    private static <T, S> OSGi<S> notGettableResult(
+        Consumer<CachingServiceReference<T>> whenAddedNotGettable,
+        Consumer<CachingServiceReference<T>> whenLeavingNotGettable,
+        CachingServiceReference<T> immutable) {
+
+        return effects(
+            () -> whenAddedNotGettable.accept(immutable),
+            () -> whenLeavingNotGettable.accept(immutable)
+        ).then(
+            nothing()
+        );
+    }
+
     public static <T> OSGi<T> service(
         CachingServiceReference<T> immutableServiceReference) {
 
@@ -265,10 +277,16 @@ public class Utils {
     public static class ServiceTuple<T> implements Comparable<ServiceTuple<T>> 
{
 
         private final CachingServiceReference<T> _serviceReference;
+        private ServiceObjects<T> _serviceObjects;
         private final T _service;
 
-        ServiceTuple(CachingServiceReference<T> a, T service) {
+        ServiceTuple(
+            CachingServiceReference<T> a, ServiceObjects<T> serviceObjects,
+            T service) {
+
             _serviceReference = a;
+
+            _serviceObjects = serviceObjects;
             _service = service;
         }
 
@@ -281,6 +299,10 @@ public class Utils {
             return _service;
         }
 
+        public ServiceObjects<T> getServiceObjects() {
+            return _serviceObjects;
+        }
+
         @Override
         public int hashCode() {
             return _serviceReference.hashCode();

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/5cb59cac/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 9b36661..4fc3dfb 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
@@ -413,7 +413,8 @@ public class Whiteboard {
 
     private <T> OSGi<?> safeRegisterEndpoint(
         CachingServiceReference<T> serviceReference,
-        CachingServiceReference<CXFJaxRsServiceRegistrator> 
registratorReference) {
+        CachingServiceReference<CXFJaxRsServiceRegistrator>
+            registratorReference) {
 
         String applicationName = getApplicationName(
             registratorReference::getProperty);
@@ -431,9 +432,7 @@ public class Whiteboard {
                     _runtime::removeErroredEndpoint).
                 then(nothing())
             ).map(
-                ServiceTuple::getCachingServiceReference
-            ).flatMap(
-                Utils::serviceObjects
+                ServiceTuple::getServiceObjects
             ).map(
                 Utils::getResourceProvider
             ).effects(

Reply via email to