Archived
0

Web API: взаимодействие с Database модулем

This commit is contained in:
2016-04-07 10:15:18 +03:00
parent df95b0e366
commit 160e1aeea3
5 changed files with 59 additions and 17 deletions

View File

@@ -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>

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -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();

View File

@@ -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")) {