X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.ext.equinox.jetty%2Fsrc%2Forg%2Fargeo%2Fequinox%2Fjetty%2FWebSocketJettyCustomizer.java;fp=org.argeo.ext.equinox.jetty%2Fsrc%2Forg%2Fargeo%2Fequinox%2Fjetty%2FWebSocketJettyCustomizer.java;h=6c868875f2c4407b8a66f4f7b54e0bcead47fa7f;hb=e189cb9175c4f220f98b0b663d12c4e5fac4dc4f;hp=0000000000000000000000000000000000000000;hpb=44a10b0a01e310b41f2b04bbb58dc0a012c78ae9;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.ext.equinox.jetty/src/org/argeo/equinox/jetty/WebSocketJettyCustomizer.java b/org.argeo.ext.equinox.jetty/src/org/argeo/equinox/jetty/WebSocketJettyCustomizer.java new file mode 100644 index 000000000..6c868875f --- /dev/null +++ b/org.argeo.ext.equinox.jetty/src/org/argeo/equinox/jetty/WebSocketJettyCustomizer.java @@ -0,0 +1,65 @@ +package org.argeo.equinox.jetty; + +import java.util.Dictionary; + +import javax.servlet.ServletException; +import javax.websocket.server.ServerContainer; + +import org.eclipse.equinox.http.jetty.JettyCustomizer; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; + +public class WebSocketJettyCustomizer extends JettyCustomizer { + private BundleContext bc = FrameworkUtil.getBundle(WebSocketJettyCustomizer.class).getBundleContext(); + + @Override + public Object customizeContext(Object context, Dictionary settings) { + 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(ServerContainer.class, serverContainer, null); +// ServiceTracker endpointsTracker = new ServiceTracker( +// bc, ServerEndpointConfig.Builder.class, null) { +// +// @Override +// public ServerEndpointConfig.Builder addingService( +// ServiceReference reference) { +// +// ServerEndpointConfig.Builder serverEndpointConfig = super.addingService(reference); +// try { +// serverContainer.addEndpoint(serverEndpointConfig.build()); +// } catch (DeploymentException e) { +// throw new IllegalArgumentException("Cannot add end point " + reference, e); +// } +// return serverEndpointConfig; +// } +// }; +// endpointsTracker.open(); + // TODO log it properly + // TODO close itproperly + } + + } + +}