X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=inline;f=org.argeo.ext.equinox.jetty%2Fsrc%2Forg%2Fargeo%2Fequinox%2Fjetty%2FCmsJettyCustomizer.java;fp=org.argeo.ext.equinox.jetty%2Fsrc%2Forg%2Fargeo%2Fequinox%2Fjetty%2FCmsJettyCustomizer.java;h=60d23719edb107c3ca811f841f594e596005b421;hb=d9ff37f84e799028a1a0300850eccae77ced2024;hp=0000000000000000000000000000000000000000;hpb=681290ba6cddc797e8a955d06d40c054b47e2ab2;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.ext.equinox.jetty/src/org/argeo/equinox/jetty/CmsJettyCustomizer.java b/org.argeo.ext.equinox.jetty/src/org/argeo/equinox/jetty/CmsJettyCustomizer.java new file mode 100644 index 000000000..60d23719e --- /dev/null +++ b/org.argeo.ext.equinox.jetty/src/org/argeo/equinox/jetty/CmsJettyCustomizer.java @@ -0,0 +1,51 @@ +package org.argeo.equinox.jetty; + +import java.util.Dictionary; + +import javax.servlet.ServletException; + +import org.eclipse.equinox.http.jetty.JettyCustomizer; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.websocket.jsr356.server.ServerContainer; +import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; + +/** Customises the Jetty HTTP server. */ +public class CmsJettyCustomizer extends JettyCustomizer { + private BundleContext bc = FrameworkUtil.getBundle(CmsJettyCustomizer.class).getBundleContext(); + + @Override + public Object customizeContext(Object context, Dictionary settings) { + // WebSocket + Object webSocketEnabled = settings.get("websocket.enabled"); + if (webSocketEnabled != null && webSocketEnabled.toString().equals("true")) { + ServletContextHandler servletContextHandler = (ServletContextHandler) context; + new WebSocketInit(servletContextHandler).start(); + } + return super.customizeContext(context, settings); + + } + + /** Configure websocket container asynchronously as it may take some time */ + private class WebSocketInit extends Thread { + ServletContextHandler servletContextHandler; + + public WebSocketInit(ServletContextHandler servletContextHandler) { + super("WebSocket Init"); + this.servletContextHandler = servletContextHandler; + } + + @Override + public void run() { + ServerContainer serverContainer; + try { + serverContainer = WebSocketServerContainerInitializer.configureContext(servletContextHandler); + } catch (ServletException e) { + throw new IllegalStateException("Cannot configure web sockets", e); + } + bc.registerService(javax.websocket.server.ServerContainer.class, serverContainer, null); + } + + } +}