]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/CmsJettyServer.java
Fix SSHD packages.
[lgpl/argeo-commons.git] / org.argeo.cms.lib.jetty / src / org / argeo / cms / jetty / CmsJettyServer.java
1 package org.argeo.cms.jetty;
2
3 import java.io.IOException;
4 import java.nio.file.Files;
5 import java.nio.file.Path;
6 import java.util.Map;
7
8 import javax.servlet.ServletContext;
9 import javax.servlet.ServletException;
10 import javax.websocket.DeploymentException;
11 import javax.websocket.server.ServerContainer;
12 import javax.websocket.server.ServerEndpointConfig;
13 import com.sun.net.httpserver.Authenticator;
14 import com.sun.net.httpserver.HttpContext;
15
16 import org.argeo.api.cms.CmsState;
17 import org.argeo.cms.CmsDeployProperty;
18 import org.argeo.cms.websocket.server.CmsWebSocketConfigurator;
19 import org.argeo.cms.websocket.server.TestEndpoint;
20 import org.eclipse.jetty.server.session.SessionHandler;
21 import org.eclipse.jetty.servlet.ServletContextHandler;
22 import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
23 import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
24
25 public class CmsJettyServer extends JettyHttpServer {
26 private static final String CONTEXT_TEMPDIR = "javax.servlet.context.tempdir";
27 // Equinox compatibility
28 private static final String INTERNAL_CONTEXT_CLASSLOADER = "org.eclipse.equinox.http.jetty.internal.ContextClassLoader";
29 // private static final CmsLog log = CmsLog.getLog(CmsJettyServer.class);
30
31 // private Server server;
32 // private Path tempDir;
33 //
34 // private ServerConnector httpConnector;
35 // private ServerConnector httpsConnector;
36 private Path tempDir;
37
38 // WebSocket
39 // private ServerContainer wsServerContainer;
40 private ServerEndpointConfig.Configurator wsEndpointConfigurator;
41
42 private CmsState cmsState;
43
44 // private Authenticator defaultAuthenticator;
45
46 protected void addServlets(ServletContextHandler servletContextHandler) throws ServletException {
47 }
48
49 @Override
50 public void start() {
51 try {
52 tempDir = Files.createTempDirectory("jetty");
53 } catch (IOException e) {
54 throw new IllegalStateException("Cannot create temp dir", e);
55 }
56 super.start();
57 }
58
59 protected ServletContextHandler createRootContextHandler() {
60 ServletContextHandler servletContextHandler = new ServletContextHandler();
61 servletContextHandler.setAttribute(INTERNAL_CONTEXT_CLASSLOADER,
62 Thread.currentThread().getContextClassLoader());
63 servletContextHandler.setClassLoader(this.getClass().getClassLoader());
64 servletContextHandler.setContextPath("/");
65
66 servletContextHandler.setAttribute(CONTEXT_TEMPDIR, tempDir.toAbsolutePath().toFile());
67 SessionHandler handler = new SessionHandler();
68 handler.setMaxInactiveInterval(-1);
69 servletContextHandler.setSessionHandler(handler);
70
71 return servletContextHandler;
72 }
73
74 @Override
75 protected void configureRootContextHandler(ServletContextHandler servletContextHandler) throws ServletException {
76 addServlets(servletContextHandler);
77 enableWebSocket(servletContextHandler);
78
79 }
80
81 // @Override
82 // public synchronized HttpContext createContext(String path) {
83 // HttpContext httpContext = super.createContext(path);
84 // httpContext.setAuthenticator(defaultAuthenticator);
85 // return httpContext;
86 // }
87
88 protected void enableWebSocket(ServletContextHandler servletContextHandler) {
89 String webSocketEnabled = getDeployProperty(CmsDeployProperty.WEBSOCKET_ENABLED);
90 // web socket
91 if (webSocketEnabled != null && webSocketEnabled.equals(Boolean.toString(true))) {
92 // JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
93 //
94 // @Override
95 // public void accept(ServletContext servletContext, ServerContainer serverContainer)
96 // throws DeploymentException {
97 //// wsServerContainer = serverContainer;
98 //
99 // CmsWebSocketConfigurator wsEndpointConfigurator = new CmsWebSocketConfigurator();
100 //
101 // ServerEndpointConfig config = ServerEndpointConfig.Builder
102 // .create(TestEndpoint.class, "/ws/test/events/{topic}").configurator(wsEndpointConfigurator)
103 // .build();
104 // try {
105 // serverContainer.addEndpoint(config);
106 // } catch (DeploymentException e) {
107 // throw new IllegalStateException("Cannot initalise the WebSocket server runtime.", e);
108 // }
109 // }
110 // });
111 }
112 }
113
114 protected String getDeployProperty(CmsDeployProperty deployProperty) {
115 return cmsState.getDeployProperty(deployProperty.getProperty());
116 }
117
118 public void setCmsState(CmsState cmsState) {
119 this.cmsState = cmsState;
120 }
121
122 // public void setDefaultAuthenticator(Authenticator defaultAuthenticator) {
123 // this.defaultAuthenticator = defaultAuthenticator;
124 // }
125
126 }