Web API: взаимодействие с Database модулем
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
<name>Web API</name>
|
||||
|
||||
<artifactId>web_api</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
<version>0.2-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
|
||||
<parent>
|
||||
@@ -22,6 +22,11 @@
|
||||
<artifactId>core</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>eu.arcadex.system</groupId>
|
||||
<artifactId>database</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-server</artifactId>
|
||||
@@ -47,7 +52,11 @@
|
||||
<Bundle-Name>Arcadex System: ${name} ${version}</Bundle-Name>
|
||||
<Bundle-SymbolicName>${groupId}.${artifactId}</Bundle-SymbolicName>
|
||||
<Bundle-Activator>eu.arcadex.system.web_api.Activator</Bundle-Activator>
|
||||
<Import-Package>eu.arcadex.system.core.api, *</Import-Package>
|
||||
<Import-Package>
|
||||
eu.arcadex.system.core.api,
|
||||
eu.arcadex.system.database.api,
|
||||
*
|
||||
</Import-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.arcadex.system.web_api;
|
||||
|
||||
import eu.arcadex.system.database.api.IDatabase;
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
@@ -10,21 +11,26 @@ import eu.arcadex.system.core.api.ICore;
|
||||
* 2016
|
||||
*/
|
||||
public class Activator implements BundleActivator {
|
||||
private ServiceTracker<?, ICore> tracker;
|
||||
private ServiceTracker<?, ICore> coreTracker;
|
||||
private ServiceTracker<?, IDatabase> dbTracker;
|
||||
private WebModule webModule;
|
||||
|
||||
@Override
|
||||
public void start(BundleContext bundleContext) throws Exception {
|
||||
tracker = new ServiceTracker(bundleContext, ICore.class.getName(), null);
|
||||
tracker.open();
|
||||
coreTracker = new ServiceTracker(bundleContext, ICore.class.getName(), null);
|
||||
coreTracker.open();
|
||||
|
||||
webModule = new WebModule(tracker);
|
||||
dbTracker = new ServiceTracker(bundleContext, IDatabase.class.getName(), null);
|
||||
dbTracker.open();
|
||||
|
||||
webModule = new WebModule(coreTracker, dbTracker);
|
||||
webModule.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop(BundleContext bundleContext) throws Exception {
|
||||
webModule.stop();
|
||||
tracker.close();
|
||||
dbTracker.close();
|
||||
coreTracker.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,9 +21,13 @@ public class RequestRouter extends AbstractHandler {
|
||||
private final Gson gson = new Gson();
|
||||
private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName());
|
||||
|
||||
private DBMethodHandler dbHandler = new DBMethodHandler();
|
||||
private DBMethodHandler dbHandler;
|
||||
private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this);
|
||||
|
||||
RequestRouter(WebModule parent) {
|
||||
dbHandler = new DBMethodHandler(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(String url, Request request, HttpServletRequest httpRequest, HttpServletResponse response) throws IOException, ServletException {
|
||||
request.setHandled(true);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package eu.arcadex.system.web_api;
|
||||
|
||||
import eu.arcadex.system.core.api.ICore;
|
||||
import eu.arcadex.system.database.api.IDatabase;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
import org.slf4j.Logger;
|
||||
@@ -12,17 +13,20 @@ import org.slf4j.LoggerFactory;
|
||||
* @author Daniil 2015
|
||||
* @author DmitriyMX <mail@dmitriymx.ru> 2016 (порт на ArcadexSystem Reborn)
|
||||
*/
|
||||
class WebModule {
|
||||
public class WebModule {
|
||||
private final int port = 8090;
|
||||
private ServiceTracker<?, IDatabase> dbTracker;
|
||||
private Logger logger = LoggerFactory.getLogger(WebModule.class.getName());
|
||||
private ICore core;
|
||||
private Server server;
|
||||
private final int port = 8090;
|
||||
|
||||
WebModule(ServiceTracker<?, ICore> tracker) {
|
||||
core = tracker.getService();
|
||||
WebModule(ServiceTracker<?, ICore> coreTracker, ServiceTracker<?, IDatabase> dbTracker) {
|
||||
core = coreTracker.getService();
|
||||
if (core == null) {
|
||||
throw new RuntimeException("Service \"ICore\" not found!");
|
||||
}
|
||||
|
||||
this.dbTracker = dbTracker;
|
||||
}
|
||||
|
||||
void init() {
|
||||
@@ -30,7 +34,7 @@ class WebModule {
|
||||
|
||||
server = new Server(port);
|
||||
server.setStopAtShutdown(true);
|
||||
server.setHandler(new RequestRouter());
|
||||
server.setHandler(new RequestRouter(this));
|
||||
|
||||
try {
|
||||
server.start();
|
||||
@@ -39,6 +43,20 @@ class WebModule {
|
||||
}
|
||||
}
|
||||
|
||||
public IDatabase getDatabase() {
|
||||
IDatabase db = null;
|
||||
try {
|
||||
db = dbTracker.waitForService(5000);
|
||||
} catch (InterruptedException ignore) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
if (db == null) {
|
||||
throw new RuntimeException("Service \"IDatabase\" not found!");
|
||||
}
|
||||
return db;
|
||||
}
|
||||
|
||||
void stop() {
|
||||
try {
|
||||
server.stop();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package eu.arcadex.system.web_api.methods;
|
||||
|
||||
import eu.arcadex.system.web_api.WebModule;
|
||||
import eu.arcadex.system.database.api.IDatabase;
|
||||
import eu.arcadex.system.web_api.Response;
|
||||
import org.eclipse.jetty.server.Request;
|
||||
|
||||
@@ -7,19 +9,21 @@ import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Handler for Database API requests
|
||||
*
|
||||
* @author Daniil on 06.04.16.
|
||||
* @author DmitriyMX <mail@dmitriymx.ru> 2016
|
||||
*/
|
||||
public class DBMethodHandler extends AbstractMethodHandler {
|
||||
// TODO: Get this from cfg
|
||||
private final String dbKey = "jhkljdsjklfjkljdasf";
|
||||
// TODO: Replace with module call
|
||||
private HashMap<String, String> database = new HashMap<>();
|
||||
private WebModule parent;
|
||||
|
||||
public DBMethodHandler(WebModule parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle database API requests
|
||||
@@ -76,6 +80,7 @@ public class DBMethodHandler extends AbstractMethodHandler {
|
||||
}
|
||||
|
||||
// Here comes actual DB listener
|
||||
IDatabase database = parent.getDatabase();
|
||||
|
||||
String key = url.substring(4).trim();
|
||||
if (request.getMethod().equalsIgnoreCase("GET")) {
|
||||
@@ -88,7 +93,7 @@ public class DBMethodHandler extends AbstractMethodHandler {
|
||||
return (new Response("success", database.get(key)));
|
||||
}
|
||||
} else if (request.getMethod().equalsIgnoreCase("POST")) {
|
||||
database.put(key, postData);
|
||||
database.set(key, postData);
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
return (new Response("success", "Ok"));
|
||||
} else if (request.getMethod().equalsIgnoreCase("DELETE")) {
|
||||
|
||||
Reference in New Issue
Block a user