Delay Whiteboard initialization until HttpRuntime Do not start the whiteboard and register the runtime until there is evidence that a HTTP Runtime exists.
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/a25250e1 Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/a25250e1 Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/a25250e1 Branch: refs/heads/master Commit: a25250e168e860ceb0c6e053a50b48a9e0175bf9 Parents: 1772702 Author: Carlos Sierra <[email protected]> Authored: Tue Nov 21 08:20:02 2017 +0100 Committer: Carlos Sierra <[email protected]> Committed: Tue Nov 21 15:08:36 2017 +0100 ---------------------------------------------------------------------- .../activator/CXFJaxRsBundleActivator.java | 70 ++++++++++---------- .../jax/rs/whiteboard/internal/Whiteboard.java | 32 ++++----- 2 files changed, 50 insertions(+), 52 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/a25250e1/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java index 425e28b..6ec4532 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java @@ -17,29 +17,22 @@ package org.apache.aries.jax.rs.whiteboard.activator; -import java.util.ArrayList; import java.util.Arrays; import java.util.Dictionary; import java.util.Hashtable; import java.util.List; -import java.util.function.Supplier; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.ext.RuntimeDelegate; import org.apache.aries.jax.rs.whiteboard.internal.ClientBuilderFactory; -import org.apache.aries.jax.rs.whiteboard.internal.Utils; import org.apache.aries.jax.rs.whiteboard.internal.Utils.PropertyHolder; -import org.apache.aries.jax.rs.whiteboard.internal.Whiteboard; -import org.apache.aries.osgi.functional.CachingServiceReference; import org.apache.aries.osgi.functional.OSGi; import org.apache.aries.osgi.functional.OSGiResult; import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; -import org.osgi.framework.Filter; -import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.http.runtime.HttpServiceRuntime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +46,6 @@ import static org.apache.aries.osgi.functional.OSGi.configurations; import static org.apache.aries.osgi.functional.OSGi.effects; import static org.apache.aries.osgi.functional.OSGi.ignore; import static org.apache.aries.osgi.functional.OSGi.just; -import static org.apache.aries.osgi.functional.OSGi.nothing; import static org.apache.aries.osgi.functional.OSGi.once; import static org.apache.aries.osgi.functional.OSGi.register; import static org.apache.aries.osgi.functional.OSGi.serviceReferences; @@ -69,9 +61,6 @@ public class CXFJaxRsBundleActivator implements BundleActivator { RuntimeDelegate.setInstance(new RuntimeDelegateImpl()); } - private OSGiResult _defaultOSGiResult; - private OSGiResult _whiteboardsResult; - @Override public void start(BundleContext bundleContext) throws Exception { if (_log.isDebugEnabled()) { @@ -119,32 +108,10 @@ public class CXFJaxRsBundleActivator implements BundleActivator { _log.debug("Stopped whiteboard factory"); } } + private OSGiResult _defaultOSGiResult; + private OSGiResult _whiteboardsResult; - private static OSGi<?> runWhiteboard( - BundleContext bundleContext, Dictionary<String, ?> configuration) { - - OSGi<List<String>> endpoints = - serviceReferences( - endpointFilter(bundleContext, configuration::get) - ).map( - r -> Arrays.asList( - canonicalize(r.getProperty(HTTP_SERVICE_ENDPOINT))) - ); - - return - just(createWhiteboard(bundleContext, configuration)).flatMap( - whiteboard -> - endpoints.distribute( - e -> once(e).effects( - __ -> whiteboard.start(), __ -> whiteboard.stop()), - e -> e.effects( - whiteboard::addHttpEndpoints, - whiteboard::removeHttpEndpoints) - )); - } - - private static String endpointFilter( - BundleContext bundleContext, PropertyHolder configuration ) { + private static String endpointFilter(PropertyHolder configuration ) { Object whiteBoardTargetProperty = configuration.get( HTTP_WHITEBOARD_TARGET); @@ -160,4 +127,35 @@ public class CXFJaxRsBundleActivator implements BundleActivator { targetFilter); } + private static OSGi<?> runWhiteboard( + BundleContext bundleContext, Dictionary<String, ?> configuration) { + + OSGi<List<String>> endpoints = + serviceReferences(endpointFilter(configuration::get) + ).map( + r -> Arrays.asList( + canonicalize(r.getProperty(HTTP_SERVICE_ENDPOINT))) + ); + + return + once( + serviceReferences( + endpointFilter(configuration::get), + __ -> false //never reload + ).then( + just(createWhiteboard(bundleContext, configuration)) + .flatMap( + whiteboard -> + all( + ignore( + endpoints.effects( + whiteboard::addHttpEndpoints, + whiteboard::removeHttpEndpoints) + ), + effects(whiteboard::start, whiteboard::stop) + ) + )) + ); + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/a25250e1/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 9f11bf8..0bfc5bf 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 @@ -132,10 +132,11 @@ public class Whiteboard { private final AriesJaxRSServiceRuntime _runtime; private final Map<String, ?> _configurationMap; private final BundleContext _bundleContext; - private ServiceRegistrationChangeCounter _counter; - private ServiceReference<?> _runtimeReference; + private final ServiceRegistrationChangeCounter _counter; + private final ServiceReference<?> _runtimeReference; + private final OSGi<Void> _program; private final List<Object> _endpoints; - private ServiceRegistration<?> _runtimeRegistration; + private final ServiceRegistration<?> _runtimeRegistration; private OSGiResult _osgiResult; private Whiteboard( @@ -145,6 +146,17 @@ public class Whiteboard { _runtime = new AriesJaxRSServiceRuntime(); _configurationMap = Maps.from(configuration); _endpoints = new ArrayList<>(); + _runtimeRegistration = registerJaxRSServiceRuntime( + new HashMap<>(_configurationMap)); + _runtimeReference = _runtimeRegistration.getReference(); + _counter = new ServiceRegistrationChangeCounter(_runtimeRegistration); + _program = + all( + ignoreResult(registerDefaultApplication()), + ignoreResult(applications()), + ignoreResult(applicationResources()), + ignoreResult(applicationExtensions() + )); } public static Whiteboard createWhiteboard( @@ -154,19 +166,7 @@ public class Whiteboard { } public void start() { - _runtimeRegistration = registerJaxRSServiceRuntime( - new HashMap<>(_configurationMap)); - _runtimeReference = _runtimeRegistration.getReference(); - _counter = new ServiceRegistrationChangeCounter(_runtimeRegistration); - - OSGi<Void> program = all( - ignoreResult(registerDefaultApplication()), - ignoreResult(applications()), - ignoreResult(applicationResources()), - ignoreResult(applicationExtensions() - )); - - _osgiResult = program.run(_bundleContext); + _osgiResult = _program.run(_bundleContext); } public void stop() {
