001    package org.hackystat.projectbrowser;
002    
003    import org.apache.wicket.protocol.http.WicketServlet;
004    import org.mortbay.jetty.Server;
005    import org.mortbay.jetty.servlet.Context;
006    import org.mortbay.jetty.servlet.ServletHolder;
007    
008    /**
009     * Provides a mechanism for running Project Browser with Jetty.
010     * 
011     * @author Philip Johnson
012     */
013    public class Start {
014    
015      /**
016       * Starts up Jetty and points it at Wicket.
017       * Jetty will check every five seconds for keyboard input from the console, and if it gets some,
018       * it will shutdown.
019       * @param args Ignored.
020       * @throws Exception If things go wrong. 
021       */
022      public static void main(String[] args) throws Exception {
023        ProjectBrowserProperties properties = new ProjectBrowserProperties();
024        int port = properties.getPort();
025        String contextPath = properties.getContextRoot();
026        Server server = new Server(port);
027        Context context = new Context(server, "/" + contextPath, Context.SESSIONS);
028    
029        ServletHolder servletHolder = new ServletHolder(new WicketServlet());
030        servletHolder.setInitParameter("applicationClassName",
031            "org.hackystat.projectbrowser.ProjectBrowserApplication");
032        servletHolder.setInitOrder(1);
033        context.addServlet(servletHolder, "/*");
034        try {
035          server.start();
036          System.out.println(properties.getHost() + " is running. Press return to stop server.");
037          while (System.in.available() == 0) {
038            Thread.sleep(5000);
039          }
040          server.stop();
041          server.join();
042        }
043        catch (Exception e) {
044          e.printStackTrace();
045          System.exit(1);
046        }
047      }
048    }