import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Map;
+import java.util.concurrent.CompletableFuture;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.websocket.DeploymentException;
import javax.websocket.server.ServerContainer;
-import javax.websocket.server.ServerEndpointConfig;
-import com.sun.net.httpserver.Authenticator;
-import com.sun.net.httpserver.HttpContext;
-
-import org.argeo.api.cms.CmsState;
-import org.argeo.cms.CmsDeployProperty;
-import org.argeo.cms.websocket.server.CmsWebSocketConfigurator;
-import org.argeo.cms.websocket.server.TestEndpoint;
+
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 {
private static final String CONTEXT_TEMPDIR = "javax.servlet.context.tempdir";
// Equinox compatibility
private static final String INTERNAL_CONTEXT_CLASSLOADER = "org.eclipse.equinox.http.jetty.internal.ContextClassLoader";
-// private static final CmsLog log = CmsLog.getLog(CmsJettyServer.class);
-
-// private Server server;
-// private Path tempDir;
-//
-// private ServerConnector httpConnector;
-// private ServerConnector httpsConnector;
private Path tempDir;
- // WebSocket
-// private ServerContainer wsServerContainer;
- private ServerEndpointConfig.Configurator wsEndpointConfigurator;
-
- private CmsState cmsState;
-
- private Authenticator defaultAuthenticator;
+ private CompletableFuture<ServerContainer> serverContainer = new CompletableFuture<>();
protected void addServlets(ServletContextHandler servletContextHandler) throws ServletException {
}
super.start();
}
+ @Override
protected ServletContextHandler createRootContextHandler() {
ServletContextHandler servletContextHandler = new ServletContextHandler();
servletContextHandler.setAttribute(INTERNAL_CONTEXT_CLASSLOADER,
handler.setMaxInactiveInterval(-1);
servletContextHandler.setSessionHandler(handler);
- return servletContextHandler;
- }
+ JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
- @Override
- protected void configureRootContextHandler(ServletContextHandler servletContextHandler) throws ServletException {
- addServlets(servletContextHandler);
- enableWebSocket(servletContextHandler);
+ @Override
+ public void accept(ServletContext servletContext, ServerContainer serverContainer)
+ throws DeploymentException {
+ CmsJettyServer.this.serverContainer.complete(serverContainer);
+ }
+ });
+ return servletContextHandler;
}
@Override
- public synchronized HttpContext createContext(String path) {
- HttpContext httpContext = super.createContext(path);
- httpContext.setAuthenticator(defaultAuthenticator);
- return httpContext;
- }
-
- protected void enableWebSocket(ServletContextHandler servletContextHandler) {
- String webSocketEnabled = getDeployProperty(CmsDeployProperty.WEBSOCKET_ENABLED);
- // web socket
- if (webSocketEnabled != null && webSocketEnabled.equals(Boolean.toString(true))) {
-// JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
-//
-// @Override
-// public void accept(ServletContext servletContext, ServerContainer serverContainer)
-// throws DeploymentException {
-//// wsServerContainer = serverContainer;
-//
-// CmsWebSocketConfigurator wsEndpointConfigurator = new CmsWebSocketConfigurator();
-//
-// ServerEndpointConfig config = ServerEndpointConfig.Builder
-// .create(TestEndpoint.class, "/ws/test/events/{topic}").configurator(wsEndpointConfigurator)
-// .build();
-// try {
-// serverContainer.addEndpoint(config);
-// } catch (DeploymentException e) {
-// throw new IllegalStateException("Cannot initalise the WebSocket server runtime.", e);
-// }
-// }
-// });
- }
- }
-
- protected String getDeployProperty(CmsDeployProperty deployProperty) {
- return cmsState.getDeployProperty(deployProperty.getProperty());
+ protected ServerContainer getRootServerContainer() {
+ return serverContainer.join();
}
- public void setCmsState(CmsState cmsState) {
- this.cmsState = cmsState;
+ @Override
+ protected void configureRootContextHandler(ServletContextHandler servletContextHandler) throws ServletException {
+ addServlets(servletContextHandler);
}
- public void setDefaultAuthenticator(Authenticator defaultAuthenticator) {
- this.defaultAuthenticator = defaultAuthenticator;
- }
+ /*
+ * WEB SOCKET
+ */
}