Adapt to changes in Argeo TP
[lgpl/argeo-commons.git] / org.argeo.cms.lib.jetty / src / org / argeo / cms / jetty / CmsJettyServer.java
index 3d4a57b9e7ff113d38095e2da4541516349e1a66..8e6db220c18c9ea2fec39c6798879109b558b317 100644 (file)
@@ -3,30 +3,26 @@ package org.argeo.cms.jetty;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.concurrent.CompletableFuture;
 
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.websocket.DeploymentException;
+import javax.websocket.server.ServerContainer;
 
-import org.eclipse.jetty.server.session.SessionHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee8.nested.SessionHandler;
+import org.eclipse.jetty.ee8.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee8.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
+import org.eclipse.jetty.ee8.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
 
+/** A {@link JettyHttpServer} which is compatible with Equinox servlets. */
 public class CmsJettyServer extends JettyHttpServer {
        private static final String CONTEXT_TEMPDIR = "javax.servlet.context.tempdir";
        // Equinox compatibility
        private static final String INTERNAL_CONTEXT_CLASSLOADER = "org.eclipse.equinox.http.jetty.internal.ContextClassLoader";
-//     private static final CmsLog log = CmsLog.getLog(CmsJettyServer.class);
-
-//     private Server server;
-//     private Path tempDir;
-//
-//     private ServerConnector httpConnector;
-//     private ServerConnector httpsConnector;
        private Path tempDir;
 
-       // WebSocket
-//     private ServerContainer wsServerContainer;
-//     private ServerEndpointConfig.Configurator wsEndpointConfigurator;
-
-//     private Authenticator defaultAuthenticator;
+       private CompletableFuture<ServerContainer> serverContainer = new CompletableFuture<>();
 
        protected void addServlets(ServletContextHandler servletContextHandler) throws ServletException {
        }
@@ -41,6 +37,7 @@ public class CmsJettyServer extends JettyHttpServer {
                super.start();
        }
 
+       @Override
        protected ServletContextHandler createRootContextHandler() {
                ServletContextHandler servletContextHandler = new ServletContextHandler();
                servletContextHandler.setAttribute(INTERNAL_CONTEXT_CLASSLOADER,
@@ -53,51 +50,30 @@ public class CmsJettyServer extends JettyHttpServer {
                handler.setMaxInactiveInterval(-1);
                servletContextHandler.setSessionHandler(handler);
 
+               JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
+
+                       @Override
+                       public void accept(ServletContext servletContext, ServerContainer serverContainer)
+                                       throws DeploymentException {
+                               CmsJettyServer.this.serverContainer.complete(serverContainer);
+                       }
+               });
+
                return servletContextHandler;
        }
 
+       @Override
+       protected ServerContainer getRootServerContainer() {
+               return serverContainer.join();
+       }
+
        @Override
        protected void configureRootContextHandler(ServletContextHandler servletContextHandler) throws ServletException {
                addServlets(servletContextHandler);
-//             enableWebSocket(servletContextHandler);
-
        }
 
-//     @Override
-//     public synchronized HttpContext createContext(String path) {
-//             HttpContext httpContext = super.createContext(path);
-//             httpContext.setAuthenticator(defaultAuthenticator);
-//             return httpContext;
-//     }
-
-//     protected void enableWebSocket(ServletContextHandler servletContextHandler) {
-//             String webSocketEnabled = getDeployProperty(CmsDeployProperty.WEBSOCKET_ENABLED);
-//             // web socket
-//             if (webSocketEnabled != null && webSocketEnabled.equals(Boolean.toString(true))) {
-////                   JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
-////
-////                           @Override
-////                           public void accept(ServletContext servletContext, ServerContainer serverContainer)
-////                                           throws DeploymentException {
-//////                                 wsServerContainer = serverContainer;
-////
-////                                   CmsWebSocketConfigurator wsEndpointConfigurator = new CmsWebSocketConfigurator();
-////
-////                                   ServerEndpointConfig config = ServerEndpointConfig.Builder
-////                                                   .create(TestEndpoint.class, "/ws/test/events/{topic}").configurator(wsEndpointConfigurator)
-////                                                   .build();
-////                                   try {
-////                                           serverContainer.addEndpoint(config);
-////                                   } catch (DeploymentException e) {
-////                                           throw new IllegalStateException("Cannot initalise the WebSocket server runtime.", e);
-////                                   }
-////                           }
-////                   });
-//             }
-//     }
-
-//     public void setDefaultAuthenticator(Authenticator defaultAuthenticator) {
-//             this.defaultAuthenticator = defaultAuthenticator;
-//     }
+       /*
+        * WEB SOCKET
+        */
 
 }