1 package org
.argeo
.cms
.jetty
;
3 import java
.io
.IOException
;
4 import java
.nio
.file
.Files
;
5 import java
.nio
.file
.Path
;
6 import java
.util
.concurrent
.CompletableFuture
;
8 import javax
.servlet
.ServletContext
;
9 import javax
.servlet
.ServletException
;
10 import javax
.websocket
.DeploymentException
;
11 import javax
.websocket
.server
.ServerContainer
;
13 import org
.eclipse
.jetty
.server
.session
.SessionHandler
;
14 import org
.eclipse
.jetty
.servlet
.ServletContextHandler
;
15 import org
.eclipse
.jetty
.websocket
.javax
.server
.config
.JavaxWebSocketServletContainerInitializer
;
16 import org
.eclipse
.jetty
.websocket
.javax
.server
.config
.JavaxWebSocketServletContainerInitializer
.Configurator
;
18 /** A {@link JettyHttpServer} which is compatible with Equinox servlets. */
19 public class CmsJettyServer
extends JettyHttpServer
{
20 private static final String CONTEXT_TEMPDIR
= "javax.servlet.context.tempdir";
21 // Equinox compatibility
22 private static final String INTERNAL_CONTEXT_CLASSLOADER
= "org.eclipse.equinox.http.jetty.internal.ContextClassLoader";
25 private CompletableFuture
<ServerContainer
> serverContainer
= new CompletableFuture
<>();
27 protected void addServlets(ServletContextHandler servletContextHandler
) throws ServletException
{
33 tempDir
= Files
.createTempDirectory("jetty");
34 } catch (IOException e
) {
35 throw new IllegalStateException("Cannot create temp dir", e
);
41 protected ServletContextHandler
createRootContextHandler() {
42 ServletContextHandler servletContextHandler
= new ServletContextHandler();
43 servletContextHandler
.setAttribute(INTERNAL_CONTEXT_CLASSLOADER
,
44 Thread
.currentThread().getContextClassLoader());
45 servletContextHandler
.setClassLoader(this.getClass().getClassLoader());
46 servletContextHandler
.setContextPath("/");
48 servletContextHandler
.setAttribute(CONTEXT_TEMPDIR
, tempDir
.toAbsolutePath().toFile());
49 SessionHandler handler
= new SessionHandler();
50 handler
.setMaxInactiveInterval(-1);
51 servletContextHandler
.setSessionHandler(handler
);
53 JavaxWebSocketServletContainerInitializer
.configure(servletContextHandler
, new Configurator() {
56 public void accept(ServletContext servletContext
, ServerContainer serverContainer
)
57 throws DeploymentException
{
58 CmsJettyServer
.this.serverContainer
.complete(serverContainer
);
62 return servletContextHandler
;
66 protected ServerContainer
getRootServerContainer() {
67 return serverContainer
.join();
71 protected void configureRootContextHandler(ServletContextHandler servletContextHandler
) throws ServletException
{
72 addServlets(servletContextHandler
);