From bf1ef95b21f5a0c470e33c6cf10022cc732f0df5 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 6 May 2015 15:30:00 +0100 Subject: [PATCH] JAL-1725 limit thread pool size; prefix /jalview to paths --- src/jalview/httpserver/HttpServer.java | 40 ++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/jalview/httpserver/HttpServer.java b/src/jalview/httpserver/HttpServer.java index 6f4aa75..e60db9a 100644 --- a/src/jalview/httpserver/HttpServer.java +++ b/src/jalview/httpserver/HttpServer.java @@ -11,19 +11,29 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.util.thread.QueuedThreadPool; /** - * An HttpServer built on Jetty + * An HttpServer built on Jetty. To use it + * * * @author gmcarstairs * @see http://eclipse.org/jetty/documentation/current/embedding-jetty.html */ public class HttpServer { - private static final String JALVIEW_PATH = "/jalview"; + /* + * 'context root' - actually just prefixed to the path for each handler for + * now - see registerHandler + */ + private static final String JALVIEW_PATH = "jalview"; /* * Singleton instance of this server @@ -79,7 +89,7 @@ public class HttpServer } /** - * Start the http server with a default thread pool size of 1 + * Start the http server * * @throws BindException */ @@ -87,11 +97,15 @@ public class HttpServer { try { - // problem: how to both limit thread pool size and - // pick a random free port - two alternative constructors - QueuedThreadPool tp = new QueuedThreadPool(1, 1); - // server = new Server(tp); // ? fails with URI null - server = new Server(0); // pick a free port number + /* + * Create a server with a small number of threads; jetty will allocate a + * free port + */ + QueuedThreadPool tp = new QueuedThreadPool(4, 1); // max, min + server = new Server(tp); + // 2 selector threads to handle incoming connections + ServerConnector connector = new ServerConnector(server, 0, 2); + server.addConnector(connector); /* * HttpServer shuts down with Jalview process @@ -100,13 +114,15 @@ public class HttpServer /* * Create a mutable set of handlers (can add handlers while the server is - * running) + * running). Using vanilla handlers here rather than servlets */ - // TODO how to combine this with context root "/jalview" + // TODO how to properly configure context root "/jalview" contextHandlers = new HandlerCollection(true); server.setHandler(contextHandlers); - server.start(); + // System.out.println(String.format( + // "HttpServer started with %d threads", server.getThreadPool() + // .getThreads())); contextRoot = server.getURI(); System.out.println("Jalview endpoint " + contextRoot); } catch (Exception e) @@ -197,7 +213,7 @@ public class HttpServer // http://stackoverflow.com/questions/20043097/jetty-9-embedded-adding-handlers-during-runtime ContextHandler ch = new ContextHandler(); ch.setAllowNullPathInfo(true); - ch.setContextPath("/" + path); + ch.setContextPath("/" + JALVIEW_PATH + "/" + path); ch.setResourceBase("."); ch.setClassLoader(Thread.currentThread() .getContextClassLoader()); -- 1.7.10.2