From 2274f275d0a5f9c804d937cd8690a1c12bc14074 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 8 Apr 2016 13:05:38 +0300 Subject: [PATCH] =?UTF-8?q?Web=20API:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20api,=20=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add api: перезагрузка всех модулей - сервер корректно останавливается --- web_api/pom.xml | 2 +- .../arcadex/system/web_api/RequestRouter.java | 12 +++++++++--- .../eu/arcadex/system/web_api/WebModule.java | 9 +++++++++ .../web_api/methods/AdminMethodHandler.java | 17 ++++++++++++++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/web_api/pom.xml b/web_api/pom.xml index db07264..dd6bf48 100644 --- a/web_api/pom.xml +++ b/web_api/pom.xml @@ -7,7 +7,7 @@ Web API web_api - 0.2-SNAPSHOT + 0.3-SNAPSHOT bundle diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java b/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java index 53378ec..1d9dbfc 100644 --- a/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java +++ b/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java @@ -20,18 +20,22 @@ import java.io.IOException; public class RequestRouter extends AbstractHandler { private final Gson gson = new Gson(); private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName()); + private WebModule parent; private DBMethodHandler dbHandler; - private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this); + private AdminMethodHandler restMethodHandler; RequestRouter(WebModule parent) { dbHandler = new DBMethodHandler(parent); + restMethodHandler = new AdminMethodHandler(this, parent.getCore()); + this.parent = parent; } @Override public void handle(String url, Request request, HttpServletRequest httpRequest, HttpServletResponse response) throws IOException, ServletException { + if (parent.isStopping()) return; request.setHandled(true); - response.setContentType("text/html;charset=utf-8"); + response.setContentType("application/json;charset=utf-8"); // Some headers for Cross Domain Origin // TODO: переместить в конфиг response.setHeader("Access-Control-Allow-Origin", "*"); @@ -42,7 +46,9 @@ public class RequestRouter extends AbstractHandler { // We don't want to have something done if we receive an OPTIONS request if (!request.getMethod().equalsIgnoreCase("OPTIONS")) { Response response1 = route(url, request, httpRequest, response); - response.getWriter().println(response1.toJson(gson)); + if (response1 != null) { + response.getWriter().println(response1.toJson(gson)); + } } else { response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println(new Response("success", "Ok").toJson(gson)); diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java b/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java index 3174437..4b608ad 100644 --- a/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java +++ b/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java @@ -33,6 +33,7 @@ public class WebModule { logger.trace("Initializing WEB-server on localhost: {}", port); server = new Server(port); + server.setStopTimeout(1000); server.setStopAtShutdown(true); server.setHandler(new RequestRouter(this)); @@ -57,6 +58,10 @@ public class WebModule { return db; } + public ICore getCore() { + return core; + } + void stop() { try { server.stop(); @@ -64,4 +69,8 @@ public class WebModule { logger.error("Error stopping JettyServer", e); } } + + public boolean isStopping() { + return server.isStopping() || server.isStopped(); + } } diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java b/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java index 9b2936a..7b9b721 100644 --- a/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java +++ b/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java @@ -1,5 +1,6 @@ package eu.arcadex.system.web_api.methods; +import eu.arcadex.system.core.api.ICore; import eu.arcadex.system.web_api.RequestRouter; import eu.arcadex.system.web_api.Response; import org.eclipse.jetty.server.Request; @@ -22,9 +23,11 @@ public class AdminMethodHandler extends AbstractMethodHandler { private List blackList = new ArrayList<>(); private RequestRouter handler; + private ICore core; - public AdminMethodHandler(RequestRouter handler) { + public AdminMethodHandler(RequestRouter handler, ICore core) { this.handler = handler; + this.core = core; } /** @@ -93,6 +96,18 @@ public class AdminMethodHandler extends AbstractMethodHandler { response.setStatus(HttpServletResponse.SC_OK); handler.getLogger().info("Login accepted: " + userName); return (new Response("success", "Ok")); + case "reload": + handler.getLogger().info("request reload modules"); + response.setStatus(202); + response.getOutputStream().close(); + response.flushBuffer(); + new Thread(){ + @Override + public void run() { + core.reloadMoludes(); + } + }.start(); + return null; default: return (new Response("success", "Not implemented yet")); }