Web API: взаимодействие с Database модулем
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.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>
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user