X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.lib.jetty%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjetty%2FJettyHttpContext.java;h=5876d52e8ae72027c5a9deaa68e815affbf89ae9;hb=78872f19d800044952737429b09f86a2e3584a10;hp=2aa4abc43a3662e5325f6e9fec9112ff159ec637;hpb=81d9084e2c9fd9d33ca1d864171d28f9564647d8;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java index 2aa4abc43..5876d52e8 100644 --- a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java +++ b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java @@ -9,11 +9,17 @@ import java.util.Map; import java.util.Objects; import java.util.Set; +import javax.servlet.ServletContext; +import javax.websocket.DeploymentException; +import javax.websocket.server.ServerContainer; + import org.argeo.cms.servlet.httpserver.HttpContextServlet; -import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.handler.ContextHandler; +import org.argeo.cms.websocket.server.WebsocketEndpoints; +import org.eclipse.jetty.server.session.SessionHandler; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer; +import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator; import com.sun.net.httpserver.Authenticator; import com.sun.net.httpserver.Filter; @@ -25,7 +31,7 @@ import com.sun.net.httpserver.HttpServer; class JettyHttpContext extends HttpContext { private final JettyHttpServer httpServer; private final String path; - private final ContextHandler contextHandler; + private final ServletContextHandler contextHandler; private final ContextAttributes attributes; private final List filters = new ArrayList<>(); @@ -36,10 +42,15 @@ class JettyHttpContext extends HttpContext { this.httpServer = httpServer; this.path = path; + // Jetty context handler ServletContextHandler servletContextHandler = new ServletContextHandler(); servletContextHandler.setContextPath(path); HttpContextServlet servlet = new HttpContextServlet(this); servletContextHandler.addServlet(new ServletHolder(servlet), "/*"); + SessionHandler sessionHandler = new SessionHandler(); + // FIXME find a better default + sessionHandler.setMaxInactiveInterval(-1); + servletContextHandler.setSessionHandler(sessionHandler); contextHandler = servletContextHandler; attributes = new ContextAttributes(); @@ -57,6 +68,25 @@ class JettyHttpContext extends HttpContext { Objects.requireNonNull(handler); this.handler = handler; + // web socket + if (handler instanceof WebsocketEndpoints) { + JavaxWebSocketServletContainerInitializer.configure(contextHandler, new Configurator() { + + @Override + public void accept(ServletContext servletContext, ServerContainer serverContainer) + throws DeploymentException { +// CmsWebSocketConfigurator wsEndpointConfigurator = new CmsWebSocketConfigurator(); + + for (Class clss : ((WebsocketEndpoints) handler).getEndPoints()) { +// Class clss = websocketEndpoints.get(path); +// ServerEndpointConfig config = ServerEndpointConfig.Builder.create(clss, path) +// .configurator(wsEndpointConfigurator).build(); + serverContainer.addEndpoint(clss); + } + } + }); + } + if (httpServer.isStarted()) try { contextHandler.start(); @@ -97,7 +127,7 @@ class JettyHttpContext extends HttpContext { return authenticator; } - public Handler getContextHandler() { + ServletContextHandler getContextHandler() { return contextHandler; }