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/08/18 14:02:00 UTC
[11/14] aries-jax-rs-whiteboard git commit: One servlet and one bus
per application
One servlet and one bus per application
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/aaaff019
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/aaaff019
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/aaaff019
Branch: refs/heads/master
Commit: aaaff019e381aa9c8d4df1535b75d8b473ee7ff9
Parents: d7c8ad4
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Aug 14 14:24:52 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Fri Aug 18 15:59:21 2017 +0200
----------------------------------------------------------------------
.../activator/CXFJaxRsBundleActivator.java | 12 ++-
.../aries/jax/rs/whiteboard/internal/Utils.java | 4 +-
.../jax/rs/whiteboard/internal/Whiteboard.java | 88 +++++++++++++-------
3 files changed, 67 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/aaaff019/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 78eb125..15c142a 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
@@ -26,6 +26,7 @@ import javax.ws.rs.ext.RuntimeDelegate;
import org.apache.aries.jax.rs.whiteboard.internal.ClientBuilderFactory;
import org.apache.aries.jax.rs.whiteboard.internal.DefaultWeb;
import org.apache.aries.jax.rs.whiteboard.internal.Maps;
+import org.apache.aries.jax.rs.whiteboard.internal.Whiteboard;
import org.apache.aries.osgi.functional.OSGi;
import org.apache.aries.osgi.functional.OSGiResult;
import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl;
@@ -59,10 +60,8 @@ public class CXFJaxRsBundleActivator implements BundleActivator {
}
OSGi<?> whiteboards =
- configurations("org.apache.aries.jax.rs.whiteboard").flatMap(configuration ->
- createWhiteboard(configuration).then(
- registerDefaultWeb())
- );
+ configurations("org.apache.aries.jax.rs.whiteboard").
+ flatMap(Whiteboard::createWhiteboard);
_whiteboardsResult = whiteboards.run(bundleContext);
@@ -77,9 +76,8 @@ public class CXFJaxRsBundleActivator implements BundleActivator {
_defaultOSGiResult =
register(ClientBuilder.class, new ClientBuilderFactory(), null).then(
- createWhiteboard(defaultConfiguration)).then(
- registerDefaultWeb()
- ).run(bundleContext);
+ createWhiteboard(defaultConfiguration))
+ .run(bundleContext);
}
@Override
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/aaaff019/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 b34414d..58f7421 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
@@ -66,7 +66,7 @@ public class Utils {
try {
CXFJaxRsServiceRegistrator registrator =
- new CXFJaxRsServiceRegistrator(bus, application, props);
+ new CXFJaxRsServiceRegistrator(bus, application);
return
onClose(registrator::close).then(
@@ -77,7 +77,7 @@ public class Utils {
return register(
FailedApplicationDTO.class, new FailedApplicationDTO(), props);
}
- };
+ }
public static OSGi<?> safeRegisterGeneric(
ServiceReference<?> serviceReference,
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/aaaff019/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 2845f24..ca404a8 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
@@ -20,6 +20,7 @@ package org.apache.aries.jax.rs.whiteboard.internal;
import org.apache.aries.osgi.functional.OSGi;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.extension.ExtensionManagerBus;
+import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.Filter;
@@ -74,17 +75,16 @@ public class Whiteboard {
public static OSGi<Void> createWhiteboard(Dictionary<String, ?> configuration) {
return
bundleContext().flatMap(bundleContext ->
- just(createBus(bundleContext, configuration)).flatMap(bus ->
- just(createDefaultJaxRsServiceRegistrator(bus)).flatMap(defaultServiceRegistrator ->
- registerJaxRSServiceRuntime(bundleContext, bus, Maps.from(configuration)).flatMap(registratorRegistration ->
+ registerJaxRSServiceRuntime(bundleContext, Maps.from(configuration)).flatMap(registratorRegistration ->
+ createDefaultJaxRsServiceRegistrator(Maps.from(configuration)).flatMap(defaultServiceRegistrator ->
just(new ServiceRegistrationChangeCounter(registratorRegistration)).flatMap(counter ->
just(registratorRegistration.getReference()).flatMap(reference ->
all(
- countChanges(whiteboardApplications(reference, bus), counter),
+ countChanges(whiteboardApplications(reference, Maps.from(configuration)), counter),
countChanges(whiteBoardApplicationSingletons(reference), counter),
countChanges(whiteboardExtensions(reference, defaultServiceRegistrator), counter),
countChanges(whiteboardSingletons(reference, defaultServiceRegistrator), counter)
- )))))));
+ ))))));
}
private static OSGi<Collection<String>> bestEffortCalculationOfEnpoints(Filter filter) {
@@ -117,11 +117,11 @@ public class Whiteboard {
return new String[]{propertyValue.toString()};
}
- private static ExtensionManagerBus createBus(BundleContext bundleContext, Dictionary<String, ?> configuration) {
+ private static ExtensionManagerBus createBus(BundleContext bundleContext, Map<String, ?> configuration) {
BundleWiring wiring = bundleContext.getBundle().adapt(BundleWiring.class);
@SuppressWarnings("unchecked")
- Map<String, Object> properties = Maps.from((Dictionary<String, Object>)configuration);
+ Map<String, Object> properties = (Map<String, Object>)configuration;
properties.put("org.apache.cxf.bus.id", configuration.get(Constants.SERVICE_PID));
@@ -132,15 +132,19 @@ public class Whiteboard {
return bus;
}
- private static CXFJaxRsServiceRegistrator createDefaultJaxRsServiceRegistrator(
- ExtensionManagerBus bus) {
+ private static OSGi<CXFJaxRsServiceRegistrator> createDefaultJaxRsServiceRegistrator(
+ Map<String, ?> configuration) {
- Map<String, Object> properties = new HashMap<>();
- properties.put(JAX_RS_APPLICATION_BASE, "/");
+ Map<String, Object> properties = new HashMap<>(configuration);
properties.put(JAX_RS_NAME, ".default");
- return new CXFJaxRsServiceRegistrator(
- bus, new DefaultApplication(), properties);
+ return
+ bundleContext().flatMap(bundleContext ->
+ just(createBus(bundleContext, configuration)).flatMap(bus ->
+ registerCXFServletService(bus, "", configuration).then(
+ just(
+ new CXFJaxRsServiceRegistrator(bus, new DefaultApplication()))
+ )));
}
private static String getApplicationFilter() {
@@ -157,22 +161,13 @@ public class Whiteboard {
private static OSGi<ServiceRegistration<?>>
registerJaxRSServiceRuntime(
- BundleContext bundleContext, Bus bus, Map<String, ?> configuration) {
+ BundleContext bundleContext, Map<String, ?> configuration) {
Map<String, Object> properties = new HashMap<>(configuration);
properties.putIfAbsent(
HTTP_WHITEBOARD_TARGET, "(osgi.http.endpoint=*)");
- properties.putIfAbsent(
- HTTP_WHITEBOARD_CONTEXT_SELECT,
- format(
- "(%s=%s)",
- HTTP_WHITEBOARD_CONTEXT_NAME,
- HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME));
-
- properties.putIfAbsent(HTTP_WHITEBOARD_SERVLET_PATTERN, "/*");
-
properties.put(Constants.SERVICE_RANKING, -1);
String targetFilter = (String)properties.get(HTTP_WHITEBOARD_TARGET);
@@ -195,8 +190,8 @@ public class Whiteboard {
properties.put(JAX_RS_SERVICE_ENDPOINT, endpoints);
return register(
- new String[]{JaxRSServiceRuntime.class.getName(), Servlet.class.getName()},
- new AriesJaxRSServiceRuntime(bus), properties);
+ new String[]{JaxRSServiceRuntime.class.getName()},
+ new AriesJaxRSServiceRuntime(), properties);
}
);
}
@@ -230,18 +225,27 @@ public class Whiteboard {
}
private static OSGi<?> whiteboardApplications(
- ServiceReference<?> jaxRsRuntimeServiceReference, ExtensionManagerBus bus) {
+ ServiceReference<?> jaxRsRuntimeServiceReference,
+ Map<String, ?> configuration) {
return
+ bundleContext().flatMap(bundleContext ->
repeatInOrder(
serviceReferences(Application.class, getApplicationFilter()).
filter(new TargetFilter<>(jaxRsRuntimeServiceReference))).
flatMap(ref ->
+ just(createBus(bundleContext, configuration)).
+ flatMap(bus ->
just(CXFJaxRsServiceRegistrator.getProperties(ref, JAX_RS_APPLICATION_BASE)).
flatMap(properties ->
service(ref).flatMap(application ->
- cxfRegistrator(bus, application, properties)
- )));
+ all(
+ cxfRegistrator(bus, application, properties),
+ registerCXFServletService(
+ bus, ref.getProperty(JAX_RS_APPLICATION_BASE).toString(),
+ properties)
+ )
+ )))));
}
private static OSGi<?> whiteboardExtensions(
@@ -283,6 +287,34 @@ public class Whiteboard {
}
+ private static OSGi<ServiceRegistration<Servlet>> registerCXFServletService(
+ Bus bus, String address, Map<String, ?> configuration) {
+
+ Map<String, Object> properties = new HashMap<>(configuration);
+
+ properties.putIfAbsent(
+ HTTP_WHITEBOARD_TARGET, "(osgi.http.endpoint=*)");
+
+ properties.putIfAbsent(
+ HTTP_WHITEBOARD_CONTEXT_SELECT,
+ format(
+ "(%s=%s)",
+ HTTP_WHITEBOARD_CONTEXT_NAME,
+ HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME));
+
+ properties.putIfAbsent(HTTP_WHITEBOARD_SERVLET_PATTERN, address + "/*");
+
+ CXFNonSpringServlet cxfNonSpringServlet = createCXFServlet(bus);
+
+ return register(Servlet.class, cxfNonSpringServlet, properties);
+ }
+
+ private static CXFNonSpringServlet createCXFServlet(Bus bus) {
+ CXFNonSpringServlet cxfNonSpringServlet = new CXFNonSpringServlet();
+ cxfNonSpringServlet.setBus(bus);
+ return cxfNonSpringServlet;
+ }
+
private static class ServiceRegistrationChangeCounter
implements ChangeCounter{