Archived
0

Web API: добавлено api, остановка сервера

- add api: перезагрузка всех модулей
- сервер корректно останавливается
This commit is contained in:
2016-04-08 13:05:38 +03:00
parent 160e1aeea3
commit 2274f275d0
4 changed files with 35 additions and 5 deletions

View File

@@ -7,7 +7,7 @@
<name>Web API</name> <name>Web API</name>
<artifactId>web_api</artifactId> <artifactId>web_api</artifactId>
<version>0.2-SNAPSHOT</version> <version>0.3-SNAPSHOT</version>
<packaging>bundle</packaging> <packaging>bundle</packaging>
<parent> <parent>

View File

@@ -20,18 +20,22 @@ import java.io.IOException;
public class RequestRouter extends AbstractHandler { public class RequestRouter extends AbstractHandler {
private final Gson gson = new Gson(); private final Gson gson = new Gson();
private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName()); private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName());
private WebModule parent;
private DBMethodHandler dbHandler; private DBMethodHandler dbHandler;
private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this); private AdminMethodHandler restMethodHandler;
RequestRouter(WebModule parent) { RequestRouter(WebModule parent) {
dbHandler = new DBMethodHandler(parent); dbHandler = new DBMethodHandler(parent);
restMethodHandler = new AdminMethodHandler(this, parent.getCore());
this.parent = parent;
} }
@Override @Override
public void handle(String url, Request request, HttpServletRequest httpRequest, HttpServletResponse response) throws IOException, ServletException { public void handle(String url, Request request, HttpServletRequest httpRequest, HttpServletResponse response) throws IOException, ServletException {
if (parent.isStopping()) return;
request.setHandled(true); request.setHandled(true);
response.setContentType("text/html;charset=utf-8"); response.setContentType("application/json;charset=utf-8");
// Some headers for Cross Domain Origin // Some headers for Cross Domain Origin
// TODO: переместить в конфиг // TODO: переместить в конфиг
response.setHeader("Access-Control-Allow-Origin", "*"); 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 // We don't want to have something done if we receive an OPTIONS request
if (!request.getMethod().equalsIgnoreCase("OPTIONS")) { if (!request.getMethod().equalsIgnoreCase("OPTIONS")) {
Response response1 = route(url, request, httpRequest, response); Response response1 = route(url, request, httpRequest, response);
response.getWriter().println(response1.toJson(gson)); if (response1 != null) {
response.getWriter().println(response1.toJson(gson));
}
} else { } else {
response.setStatus(HttpServletResponse.SC_OK); response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(new Response("success", "Ok").toJson(gson)); response.getWriter().println(new Response("success", "Ok").toJson(gson));

View File

@@ -33,6 +33,7 @@ public class WebModule {
logger.trace("Initializing WEB-server on localhost: {}", port); logger.trace("Initializing WEB-server on localhost: {}", port);
server = new Server(port); server = new Server(port);
server.setStopTimeout(1000);
server.setStopAtShutdown(true); server.setStopAtShutdown(true);
server.setHandler(new RequestRouter(this)); server.setHandler(new RequestRouter(this));
@@ -57,6 +58,10 @@ public class WebModule {
return db; return db;
} }
public ICore getCore() {
return core;
}
void stop() { void stop() {
try { try {
server.stop(); server.stop();
@@ -64,4 +69,8 @@ public class WebModule {
logger.error("Error stopping JettyServer", e); logger.error("Error stopping JettyServer", e);
} }
} }
public boolean isStopping() {
return server.isStopping() || server.isStopped();
}
} }

View File

@@ -1,5 +1,6 @@
package eu.arcadex.system.web_api.methods; 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.RequestRouter;
import eu.arcadex.system.web_api.Response; import eu.arcadex.system.web_api.Response;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
@@ -22,9 +23,11 @@ public class AdminMethodHandler extends AbstractMethodHandler {
private List<String> blackList = new ArrayList<>(); private List<String> blackList = new ArrayList<>();
private RequestRouter handler; private RequestRouter handler;
private ICore core;
public AdminMethodHandler(RequestRouter handler) { public AdminMethodHandler(RequestRouter handler, ICore core) {
this.handler = handler; this.handler = handler;
this.core = core;
} }
/** /**
@@ -93,6 +96,18 @@ public class AdminMethodHandler extends AbstractMethodHandler {
response.setStatus(HttpServletResponse.SC_OK); response.setStatus(HttpServletResponse.SC_OK);
handler.getLogger().info("Login accepted: " + userName); handler.getLogger().info("Login accepted: " + userName);
return (new Response("success", "Ok")); 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: default:
return (new Response("success", "Not implemented yet")); return (new Response("success", "Not implemented yet"));
} }