X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.lib.jetty%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjetty%2FCmsJettyServer.java;h=b0b348d9ccfec48a514b93042cd20b2fc2f87757;hb=5b6b49fa655c7b3ae3dcc06d6c504e3d0225684f;hp=90a800f7eff894cbfde502d956da8e6aadec77b0;hpb=fbdca9fcba285280f1d113671ef3ba7a670e45c7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/CmsJettyServer.java b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/CmsJettyServer.java index 90a800f7e..b0b348d9c 100644 --- a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/CmsJettyServer.java +++ b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/CmsJettyServer.java @@ -3,11 +3,17 @@ 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.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer; +import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator; /** A {@link JettyHttpServer} which is compatible with Equinox servlets. */ public class CmsJettyServer extends JettyHttpServer { @@ -16,6 +22,8 @@ public class CmsJettyServer extends JettyHttpServer { private static final String INTERNAL_CONTEXT_CLASSLOADER = "org.eclipse.equinox.http.jetty.internal.ContextClassLoader"; private Path tempDir; + private CompletableFuture serverContainer = new CompletableFuture<>(); + protected void addServlets(ServletContextHandler servletContextHandler) throws ServletException { } @@ -29,6 +37,7 @@ public class CmsJettyServer extends JettyHttpServer { super.start(); } + @Override protected ServletContextHandler createRootContextHandler() { ServletContextHandler servletContextHandler = new ServletContextHandler(); servletContextHandler.setAttribute(INTERNAL_CONTEXT_CLASSLOADER, @@ -41,11 +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); } + + /* + * WEB SOCKET + */ + }