package com.venky.swf;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.lang.management.ManagementFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.session.SessionHandler;
import com.venky.core.util.ObjectUtil;
import com.venky.swf.routing.Config;
import com.venky.swf.routing.Router;
import com.venky.swf.routing.SWFClassLoader;
/**
* Hello world!
*
*/
public class JettyServer {
int port = 8080;
public JettyServer() {
}
public JettyServer(int port) {
this();
this.port = port;
}
public static void main(String[] args) throws Exception {
String pidfile = System.getProperty("swf.pidfile");
if (!ObjectUtil.isVoid(pidfile)){
PrintWriter pw = new PrintWriter(new FileWriter(pidfile, true));
String name = ManagementFactory.getRuntimeMXBean().getName();
pw.write(name);
pw.close();
}
JettyServer s = new JettyServer(Integer.valueOf(Config.instance().getPortNumber()));
s.start();
}
public boolean isDevelopmentEnvironment(){
return Config.instance().isDevelopmentEnvironment();
}
public void start() throws Exception {
if (Config.instance().getBooleanProperty("System.out.close",false)){
System.out.close();
}
if (Config.instance().getBooleanProperty("System.err.close",false)){
System.err.close();
}
if (Config.instance().getBooleanProperty("System.in.close",false)){
System.in.close();
}
Server server = new Server(this.port);
server.setStopAtShutdown(true);
server.setStopTimeout(100);
Router router = Router.instance();
if (isDevelopmentEnvironment()){
router.setLoader(new SWFClassLoader(getClass().getClassLoader()));
}else {
router.setLoader(getClass().getClassLoader());
}
ContextHandler ctxHandler = new ContextHandler();
ctxHandler.setHandler(router);
SessionHandler sessionHandler = new SessionHandler();
sessionHandler.setHandler(ctxHandler);
server.setHandler(sessionHandler);
server.start();
server.join();
}
}