Web API: добавлено api, остановка сервера
- add api: перезагрузка всех модулей - сервер корректно останавливается
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user