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> <name>Web API</name>
<artifactId>web_api</artifactId> <artifactId>web_api</artifactId>
<version>0.1-SNAPSHOT</version> <version>0.2-SNAPSHOT</version>
<packaging>bundle</packaging> <packaging>bundle</packaging>
<parent> <parent>
@@ -22,6 +22,11 @@
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>0.1-SNAPSHOT</version> <version>0.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>eu.arcadex.system</groupId>
<artifactId>database</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId> <artifactId>jetty-server</artifactId>
@@ -47,7 +52,11 @@
<Bundle-Name>Arcadex System: ${name} ${version}</Bundle-Name> <Bundle-Name>Arcadex System: ${name} ${version}</Bundle-Name>
<Bundle-SymbolicName>${groupId}.${artifactId}</Bundle-SymbolicName> <Bundle-SymbolicName>${groupId}.${artifactId}</Bundle-SymbolicName>
<Bundle-Activator>eu.arcadex.system.web_api.Activator</Bundle-Activator> <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> </instructions>
</configuration> </configuration>
</plugin> </plugin>

View File

@@ -1,5 +1,6 @@
package eu.arcadex.system.web_api; package eu.arcadex.system.web_api;
import eu.arcadex.system.database.api.IDatabase;
import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext; import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTracker;
@@ -10,21 +11,26 @@ import eu.arcadex.system.core.api.ICore;
* 2016 * 2016
*/ */
public class Activator implements BundleActivator { public class Activator implements BundleActivator {
private ServiceTracker<?, ICore> tracker; private ServiceTracker<?, ICore> coreTracker;
private ServiceTracker<?, IDatabase> dbTracker;
private WebModule webModule; private WebModule webModule;
@Override @Override
public void start(BundleContext bundleContext) throws Exception { public void start(BundleContext bundleContext) throws Exception {
tracker = new ServiceTracker(bundleContext, ICore.class.getName(), null); coreTracker = new ServiceTracker(bundleContext, ICore.class.getName(), null);
tracker.open(); coreTracker.open();
webModule = new WebModule(tracker); dbTracker = new ServiceTracker(bundleContext, IDatabase.class.getName(), null);
dbTracker.open();
webModule = new WebModule(coreTracker, dbTracker);
webModule.init(); webModule.init();
} }
@Override @Override
public void stop(BundleContext bundleContext) throws Exception { public void stop(BundleContext bundleContext) throws Exception {
webModule.stop(); 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 final Gson gson = new Gson();
private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName()); private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName());
private DBMethodHandler dbHandler = new DBMethodHandler(); private DBMethodHandler dbHandler;
private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this); private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this);
RequestRouter(WebModule parent) {
dbHandler = new DBMethodHandler(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 {
request.setHandled(true); request.setHandled(true);

View File

@@ -1,6 +1,7 @@
package eu.arcadex.system.web_api; package eu.arcadex.system.web_api;
import eu.arcadex.system.core.api.ICore; import eu.arcadex.system.core.api.ICore;
import eu.arcadex.system.database.api.IDatabase;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -12,17 +13,20 @@ import org.slf4j.LoggerFactory;
* @author Daniil 2015 * @author Daniil 2015
* @author DmitriyMX <mail@dmitriymx.ru> 2016 (порт на ArcadexSystem Reborn) * @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 Logger logger = LoggerFactory.getLogger(WebModule.class.getName());
private ICore core; private ICore core;
private Server server; private Server server;
private final int port = 8090;
WebModule(ServiceTracker<?, ICore> tracker) { WebModule(ServiceTracker<?, ICore> coreTracker, ServiceTracker<?, IDatabase> dbTracker) {
core = tracker.getService(); core = coreTracker.getService();
if (core == null) { if (core == null) {
throw new RuntimeException("Service \"ICore\" not found!"); throw new RuntimeException("Service \"ICore\" not found!");
} }
this.dbTracker = dbTracker;
} }
void init() { void init() {
@@ -30,7 +34,7 @@ class WebModule {
server = new Server(port); server = new Server(port);
server.setStopAtShutdown(true); server.setStopAtShutdown(true);
server.setHandler(new RequestRouter()); server.setHandler(new RequestRouter(this));
try { try {
server.start(); 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() { void stop() {
try { try {
server.stop(); server.stop();

View File

@@ -1,5 +1,7 @@
package eu.arcadex.system.web_api.methods; 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 eu.arcadex.system.web_api.Response;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
@@ -7,19 +9,21 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
/** /**
* Handler for Database API requests * Handler for Database API requests
* *
* @author Daniil on 06.04.16. * @author Daniil on 06.04.16.
* @author DmitriyMX <mail@dmitriymx.ru> 2016
*/ */
public class DBMethodHandler extends AbstractMethodHandler { public class DBMethodHandler extends AbstractMethodHandler {
// TODO: Get this from cfg // TODO: Get this from cfg
private final String dbKey = "jhkljdsjklfjkljdasf"; private final String dbKey = "jhkljdsjklfjkljdasf";
// TODO: Replace with module call private WebModule parent;
private HashMap<String, String> database = new HashMap<>();
public DBMethodHandler(WebModule parent) {
this.parent = parent;
}
/** /**
* Handle database API requests * Handle database API requests
@@ -76,6 +80,7 @@ public class DBMethodHandler extends AbstractMethodHandler {
} }
// Here comes actual DB listener // Here comes actual DB listener
IDatabase database = parent.getDatabase();
String key = url.substring(4).trim(); String key = url.substring(4).trim();
if (request.getMethod().equalsIgnoreCase("GET")) { if (request.getMethod().equalsIgnoreCase("GET")) {
@@ -88,7 +93,7 @@ public class DBMethodHandler extends AbstractMethodHandler {
return (new Response("success", database.get(key))); return (new Response("success", database.get(key)));
} }
} else if (request.getMethod().equalsIgnoreCase("POST")) { } else if (request.getMethod().equalsIgnoreCase("POST")) {
database.put(key, postData); database.set(key, postData);
response.setStatus(HttpServletResponse.SC_OK); response.setStatus(HttpServletResponse.SC_OK);
return (new Response("success", "Ok")); return (new Response("success", "Ok"));
} else if (request.getMethod().equalsIgnoreCase("DELETE")) { } else if (request.getMethod().equalsIgnoreCase("DELETE")) {