Improve integration.
[lgpl/argeo-commons.git] / org.argeo.ext.equinox.jetty / src / org / argeo / equinox / jetty / CmsJettyCustomizer.java
index 60d23719edb107c3ca811f841f594e596005b421..46f0280bd103a06370431fa370b3978c489f1e92 100644 (file)
@@ -2,12 +2,14 @@ package org.argeo.equinox.jetty;
 
 import java.util.Dictionary;
 
-import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
+import javax.websocket.DeploymentException;
 
 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.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.Configurator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
 
@@ -15,37 +17,24 @@ import org.osgi.framework.FrameworkUtil;
 public class CmsJettyCustomizer extends JettyCustomizer {
        private BundleContext bc = FrameworkUtil.getBundle(CmsJettyCustomizer.class).getBundleContext();
 
+       public final static String WEBSOCKET_ENABLED = "websocket.enabled";
+
        @Override
        public Object customizeContext(Object context, Dictionary<String, ?> settings) {
                // WebSocket
-               Object webSocketEnabled = settings.get("websocket.enabled");
+               Object webSocketEnabled = settings.get(WEBSOCKET_ENABLED);
                if (webSocketEnabled != null && webSocketEnabled.toString().equals("true")) {
                        ServletContextHandler servletContextHandler = (ServletContextHandler) context;
-                       new WebSocketInit(servletContextHandler).start();
+                       WebSocketServerContainerInitializer.configure(servletContextHandler, new Configurator() {
+
+                               @Override
+                               public void accept(ServletContext servletContext, ServerContainer serverContainer)
+                                               throws DeploymentException {
+                                       bc.registerService(javax.websocket.server.ServerContainer.class, serverContainer, null);
+                               }
+                       });
                }
                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);
-               }
-
-       }
 }