X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.lib.jetty%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjetty%2FJettyHttpServer.java;h=027ef9f3dcba0b54dc1a1371e126f9f45e566642;hb=2ddf8219c721df80456d99848cc25ce69238297d;hp=e414f5f984f3053dfc54ac3278069d0314cf83a0;hpb=8c6e16aa43d9523e1ec57a41a06b3ceba7d23fdb;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpServer.java b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpServer.java index e414f5f98..027ef9f3d 100644 --- a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpServer.java +++ b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpServer.java @@ -32,6 +32,7 @@ import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpsConfigurator; import com.sun.net.httpserver.HttpsServer; +/** An {@link HttpServer} implementation based on Jetty. */ public class JettyHttpServer extends HttpsServer { private final static CmsLog log = CmsLog.getLog(JettyHttpServer.class); @@ -95,15 +96,9 @@ public class JettyHttpServer extends HttpsServer { // httpContext.addServlet(holder, "/*"); if (rootContextHandler != null) configureRootContextHandler(rootContextHandler); -// server.setHandler(rootContextHandler); -// ContextHandlerCollection contextHandlers = new ContextHandlerCollection(); if (rootContextHandler != null && !contexts.containsKey("/")) contextHandlerCollection.addHandler(rootContextHandler); -// for (String contextPath : contexts.keySet()) { -// JettyHttpContext ctx = contexts.get(contextPath); -// contextHandlers.addHandler(ctx.getContextHandler()); -// } server.setHandler(contextHandlerCollection); @@ -112,11 +107,23 @@ public class JettyHttpServer extends HttpsServer { server.start(); // + // Addresses + String httpHost = getDeployProperty(CmsDeployProperty.HOST); + String fallBackHostname = cmsState != null ? cmsState.getHostname() : "::1"; + if (httpConnector != null) { + httpAddress = new InetSocketAddress(httpHost != null ? httpHost : fallBackHostname, + httpConnector.getLocalPort()); + } else if (httpsConnector != null) { + httpsAddress = new InetSocketAddress(httpHost != null ? httpHost : fallBackHostname, + httpsConnector.getLocalPort()); + } + // Clean up Runtime.getRuntime().addShutdownHook(new Thread(() -> stop(), "Jetty shutdown")); log.info(httpPortsMsg()); started = true; } catch (Exception e) { + stop(); throw new IllegalStateException("Cannot start Jetty HTTPS server", e); } } @@ -130,12 +137,11 @@ public class JettyHttpServer extends HttpsServer { public void stop() { try { - // serverConnector.close(); server.stop(); // TODO delete temp dir started = false; } catch (Exception e) { - e.printStackTrace(); + log.error("Cannot stop Jetty HTTP server", e); } } @@ -186,7 +192,10 @@ public class JettyHttpServer extends HttpsServer { @Override public InetSocketAddress getAddress() { - return httpAddress; + InetSocketAddress res = httpAddress != null ? httpAddress : httpsAddress; + if (res == null) + throw new IllegalStateException("Neither an HTTP nor and HTTPS address is available"); + return res; } @Override @@ -204,22 +213,22 @@ public class JettyHttpServer extends HttpsServer { String httpPortStr = getDeployProperty(CmsDeployProperty.HTTP_PORT); String httpsPortStr = getDeployProperty(CmsDeployProperty.HTTPS_PORT); + if (httpPortStr != null && httpsPortStr != null) + throw new IllegalArgumentException("Either an HTTP or an HTTPS should be configured, not both"); + if (httpPortStr == null && httpsPortStr == null) + throw new IllegalArgumentException("Neither an HTTP or HTTPS port was configured"); /// TODO make it more generic String httpHost = getDeployProperty(CmsDeployProperty.HOST); -// String httpsHost = getFrameworkProp( -// JettyConfig.JETTY_PROPERTY_PREFIX + CmsHttpConstants.HTTPS_HOST); // try { if (httpPortStr != null || httpsPortStr != null) { // TODO deal with hostname resolving taking too much time // String fallBackHostname = InetAddress.getLocalHost().getHostName(); - String fallBackHostname = cmsState != null ? cmsState.getHostname() : "::1"; boolean httpEnabled = httpPortStr != null; - // props.put(JettyHttpConstants.HTTP_ENABLED, httpEnabled); boolean httpsEnabled = httpsPortStr != null; - // props.put(JettyHttpConstants.HTTPS_ENABLED, httpsEnabled); + if (httpsEnabled) { int httpsPort = Integer.parseInt(httpsPortStr); httpConfiguration.setSecureScheme("https"); @@ -233,7 +242,6 @@ public class JettyHttpServer extends HttpsServer { httpConnector.setHost(httpHost); httpConnector.setIdleTimeout(DEFAULT_IDLE_TIMEOUT); - httpAddress = new InetSocketAddress(httpHost != null ? httpHost : fallBackHostname, httpPort); } if (httpsEnabled) { @@ -269,8 +277,6 @@ public class JettyHttpServer extends HttpsServer { int httpsPort = Integer.parseInt(httpsPortStr); httpsConnector.setPort(httpsPort); httpsConnector.setHost(httpHost); - - httpsAddress = new InetSocketAddress(httpHost != null ? httpHost : fallBackHostname, httpsPort); } }