package de.tud.kom.socom;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.logging.LogManager;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.bio.SocketConnector;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
import de.tud.kom.socom.util.Logger;
import de.tud.kom.socom.util.LoggerFactory;
import de.tud.kom.socom.util.ResourceLoader;
import de.tud.kom.socom.util.SocomRequest;
/**
* Servlet taking Requests
*/
@SuppressWarnings("serial")
@WebServlet(description = "Connection Class for Socom", urlPatterns = { "/SocomCore" })
public class DeploySocom extends HttpServlet {
private static final String PATH_TO_LOG4J_CONFIGFILE = "./config/log4j.xml";
private static final Logger logger = LoggerFactory.getLogger();
private SocomCore socom;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
socom.doRequest(new SocomRequest(request, response));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
socom.doRequest(new SocomRequest(request, response));
}
public static void main(String[] args) {
initLogger();
// int port = 8080;
int port = Integer.parseInt(ResourceLoader.getResource("port"));
if (args.length > 0)
port = Integer.valueOf(args[0]);
// Start Server
new DeploySocom().startServer(port);
}
private static void initLogger() {
LoggerFactory.initializeLoggerFactory(PATH_TO_LOG4J_CONFIGFILE);
LogManager.getLogManager().reset(); // use this to diable restfb
// java.util.logging Logs
}
public void startServer(int port) {
Server server = new Server(port);
SocketConnector http = new SocketConnector();
server.addConnector(http);
// set up gwt handler
WebAppContext gwthandler = new WebAppContext();
gwthandler.setResourceBase("./war");
gwthandler.setDescriptor("./war/WEB-INF/web.xml");
gwthandler.setContextPath("/web");
gwthandler.setParentLoaderPriority(true);
ServletContextHandler servletHandler = new ServletContextHandler(server, "/servlet", true, true);
servletHandler.setMaxFormContentSize(50000000 /* 50 MB */);
servletHandler.addServlet(new ServletHolder(this), "/");
HandlerList handlers = new HandlerList();
handlers.addHandler(servletHandler);
handlers.addHandler(gwthandler);
server.setHandler(handlers);
try {
server.start();
logger.Info("***Server is running on " + InetAddress.getLocalHost() + "@" + port);
} catch (UnknownHostException e) {
logger.Info("***Server is running on port " + port);
} catch (Throwable t) {
if (t.getMessage().contains("Permission")) {
logger.Fatal("Failed to start Server. Right permissions? (Only superusers can use ports < 1024)");
t.printStackTrace();
} else {
logger.Fatal("Failed to start Server. Already Running?");
t.printStackTrace();
}
return;
}
this.socom = new SocomCore();
}
@Override
public void init() {
// called by ServletContainer on init of given servlet object...
}
@Override
public void destroy() {
finalize();
}
@Override
public void finalize() {
// everything to do on a shutdown by ServletContainer
org.apache.log4j.LogManager.shutdown(); // maybe this helps to flush the
// buffers to files
}
}