]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/ContextHandlerHttpContext.java
Improve UI timeout
[lgpl/argeo-commons.git] / org.argeo.cms.lib.jetty / src / org / argeo / cms / jetty / ContextHandlerHttpContext.java
1 package org.argeo.cms.jetty;
2
3 import java.util.Map;
4
5 import javax.servlet.ServletContext;
6 import javax.websocket.DeploymentException;
7 import javax.websocket.server.ServerContainer;
8
9 import org.argeo.cms.servlet.httpserver.HttpContextServlet;
10 import org.argeo.cms.websocket.server.WebsocketEndpoints;
11 import org.eclipse.jetty.ee8.nested.SessionHandler;
12 import org.eclipse.jetty.ee8.servlet.ServletContextHandler;
13 import org.eclipse.jetty.ee8.servlet.ServletHolder;
14 import org.eclipse.jetty.ee8.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
15 import org.eclipse.jetty.ee8.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
16
17 import com.sun.net.httpserver.HttpHandler;
18
19 /**
20 * An @{HttpContext} implementation based on a Jetty
21 * {@link ServletContextHandler}.
22 */
23 class ContextHandlerHttpContext extends JettyHttpContext {
24 private final ServletContextHandler servletContextHandler;
25 private final ContextHandlerAttributes attributes;
26
27 public ContextHandlerHttpContext(JettyHttpServer httpServer, String path) {
28 super(httpServer, path);
29
30 // Jetty context handler
31 this.servletContextHandler = new ServletContextHandler();
32 servletContextHandler.setContextPath(path);
33 HttpContextServlet servlet = new HttpContextServlet(this);
34 servletContextHandler.addServlet(new ServletHolder(servlet), "/*");
35 SessionHandler sessionHandler = new SessionHandler();
36 // FIXME find a better default
37 sessionHandler.setMaxInactiveInterval(-1);
38 servletContextHandler.setSessionHandler(sessionHandler);
39
40 attributes = new ContextHandlerAttributes(servletContextHandler);
41 }
42
43 @Override
44 public void setHandler(HttpHandler handler) {
45 super.setHandler(handler);
46
47 // web socket
48 if (handler instanceof WebsocketEndpoints) {
49 JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
50
51 @Override
52 public void accept(ServletContext servletContext, ServerContainer serverContainer)
53 throws DeploymentException {
54 for (Class<?> clss : ((WebsocketEndpoints) handler).getEndPoints()) {
55 serverContainer.addEndpoint(clss);
56 }
57 }
58 });
59 }
60
61 if (getJettyHttpServer().isStarted())
62 try {
63 servletContextHandler.start();
64 } catch (Exception e) {
65 throw new IllegalStateException("Cannot start context handler", e);
66 }
67 }
68
69 @Override
70 public Map<String, Object> getAttributes() {
71 return attributes;
72 }
73
74 @Override
75 protected ServletContextHandler getServletContextHandler() {
76 return servletContextHandler;
77 }
78
79 }