package org.opensextant.service;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import org.restlet.Component;
import org.restlet.Server;
import org.restlet.data.Protocol;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OpenSextantServer {
/** Log object. */
private static final Logger LOGGER = LoggerFactory.getLogger(OpenSextantServer.class);
private OpenSextantServer() {
}
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
InputStream input = new FileInputStream(args[0]);
// load properties file
prop.load(input);
// Create a new Component.
Component component = new Component();
// get port from environment variable
String port_env = System.getenv("PORT");
int port = 8182;
if(port_env != null) {
port = Integer.parseInt(port_env);
}
// Add a new HTTP server listening on port.
Server srvr = new Server(Protocol.HTTP, port);
component.getServers().add(srvr);
// get some server properties or defaults
String minThreads = prop.getProperty("os.service.server.minThreads", "1");
String maxThreads = prop.getProperty("os.service.server.maxThreads", "10");
String maxQueued = prop.getProperty("os.service.server.maxQueued", "-1");
String maxIdle = prop.getProperty("os.service.server.maxIdle", "300000");
// set the server parameters
srvr.getContext().getParameters().add("minThreads", minThreads);
srvr.getContext().getParameters().add("maxThreads", maxThreads);
srvr.getContext().getParameters().add("maxQueued", maxQueued);
srvr.getContext().getParameters().add("maxThreadIdleTimeMs", maxIdle);
// Attach the application.
OpenSextantApplication app = new OpenSextantApplication(prop);
// set the topmost route
component.getDefaultHost().attach("/opensextant", app);
app.getContext().getAttributes().put("component", component);
// Start the component.
component.start();
LOGGER.info("OpenSextant REST server is ready");
}
}