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/21 17:44:29 UTC
[10/11] aries-jax-rs-whiteboard git commit: Deploy each application
in a different context
Deploy each application in a different context
Each application must be isolated from each other regarding, for
instance, http sessions.
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/6b44cd43
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/6b44cd43
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/6b44cd43
Branch: refs/heads/master
Commit: 6b44cd43b215d23742a68ebb3ede935981fded8f
Parents: c46f816
Author: Carlos Sierra <cs...@apache.org>
Authored: Tue Nov 21 18:28:56 2017 +0100
Committer: Carlos Sierra <cs...@apache.org>
Committed: Tue Nov 21 18:28:56 2017 +0100
----------------------------------------------------------------------
.../jax/rs/whiteboard/internal/Whiteboard.java | 52 +++++++++++++++-----
1 file changed, 39 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/6b44cd43/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 22b136e..1f9ff5a 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
@@ -33,9 +33,11 @@ import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.http.context.ServletContextHelper;
import org.osgi.service.jaxrs.runtime.JaxRSServiceRuntime;
import javax.servlet.Servlet;
+import javax.servlet.ServletContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.container.DynamicFeature;
@@ -84,6 +86,7 @@ import static org.apache.aries.osgi.functional.OSGi.register;
import static org.apache.aries.osgi.functional.OSGi.serviceReferences;
import static org.apache.aries.osgi.functional.Utils.highest;
import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME;
+import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH;
import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT;
import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME;
import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED;
@@ -92,6 +95,7 @@ import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHIT
import static org.osgi.service.jaxrs.runtime.JaxRSServiceRuntimeConstants.JAX_RS_SERVICE_ENDPOINT;
import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_APPLICATION_BASE;
import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT;
+import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_DEFAULT_APPLICATION;
import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_EXTENSION;
import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_EXTENSION_SELECT;
import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_NAME;
@@ -313,8 +317,7 @@ public class Whiteboard {
return properties;
}).flatMap(properties ->
deployRegistrator(bus, tuple, properties).then(
- registerCXFServletService(
- bus, getApplicationBase(properties::get), properties)).then(
+ registerCXFServletService(bus, properties)).then(
just(tuple)
)));
}
@@ -703,19 +706,14 @@ public class Whiteboard {
}
private static OSGi<ServiceRegistration<Servlet>> registerCXFServletService(
- Bus bus, String address, Map<String, ?> configuration) {
+ Bus bus, 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));
+ String address = getApplicationBase(configuration::get);
if (!address.startsWith("/")) {
address = "/" + address;
@@ -725,12 +723,40 @@ public class Whiteboard {
address = address.substring(0, address.length() - 1);
}
- properties.putIfAbsent(HTTP_WHITEBOARD_SERVLET_PATTERN, address + "/*");
- properties.putIfAbsent(HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED, true);
+ String applicationName = getApplicationName(configuration::get);
+
+ HashMap<String, Object> contextProperties = new HashMap<>();
+
+ String contextName;
+
+ if (JAX_RS_DEFAULT_APPLICATION.equals(applicationName)) {
+ contextName = HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME;
+ }
+ else {
+ contextName = "context.for" + applicationName;
+ }
+
+ contextProperties.put(HTTP_WHITEBOARD_CONTEXT_NAME, contextName);
+ contextProperties.put(HTTP_WHITEBOARD_CONTEXT_PATH, address);
- CXFNonSpringServlet cxfNonSpringServlet = createCXFServlet(bus);
+ HashMap<String, Object> servletProperties = new HashMap<>(properties);
+
+ servletProperties.put(
+ HTTP_WHITEBOARD_CONTEXT_SELECT,
+ format("(%s=%s)", HTTP_WHITEBOARD_CONTEXT_NAME,
+ contextProperties.get(HTTP_WHITEBOARD_CONTEXT_NAME)));
- return register(Servlet.class, cxfNonSpringServlet, properties);
+ servletProperties.put(
+ HTTP_WHITEBOARD_SERVLET_PATTERN, "/*");
+ servletProperties.put(
+ HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED, true);
+
+ return
+ register(
+ ServletContextHelper.class,
+ new ServletContextHelper() {}, contextProperties).
+ then(
+ register(Servlet.class, createCXFServlet(bus), servletProperties));
}
private static boolean signalsValidInterface(