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(
