Package org.geoserver.web

Source Code of org.geoserver.web.Start

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.thread.BoundedThreadPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

//import org.apache.commons.io.IOUtils;

/**
* Jetty starter, will run GeoBatch inside the Jetty web container.<br>
* Useful for debugging, especially in IDE were you have direct dependencies between the sources of the various modules (such as Eclipse).
*
* @author Andrea Aime - GeoSolutions SAS
* @author Carlo Cancellieri - GeoSolutions SAS
*
*/
public class Start {
    private static final Logger log = LoggerFactory.getLogger(Start.class);

    public static void main(String[] args) {

    Server server = null;
    SocketConnector conn = null;
    try {
      server = new Server();

      // TODO pass properties file
      File properties = null;
      if (args.length == 1) {
        String propertiesFileName = args[0];
        if (!propertiesFileName.isEmpty()) {
          properties = new File(propertiesFileName);
        }
      } else {
        properties = new File("src/test/resources/jetty.properties");
      }
      Properties prop = loadProperties(properties);
     
      for (Object key : prop.keySet()){
          String property=System.getProperty(key.toString());
          String envProp=System.getenv(key.toString());
          if (property !=null){
              prop.put(key,property);             
          } else if (envProp!=null) {
              prop.put(key,envProp);
          }
      }
     
      // load properties into system env
      setSystemProperties(prop);

      server.setHandler(configureContext(prop));

      conn = configureConnection(prop);

      server.setConnectors(new Connector[] { conn });

      server.start();

      // use this to test normal stop behavior, that is, to check stuff
      // that
      // need to be done on container shutdown (and yes, this will make
      // jetty stop just after you started it...)
      // jettyServer.stop();
    } catch (Throwable e) {
      log.error("Could not start the Jetty server: " + e.getMessage(), e);

      if (server != null) {
        try {
          server.stop();
        } catch (Exception e1) {
          log.error(
              "Unable to stop the Jetty server:"
                  + e1.getMessage(), e1);
        }
      }
      if (conn != null) {
        try {
          conn.stop();
        } catch (Exception e1) {
          log.error(
              "Unable to stop the connection:" + e1.getMessage(),
              e1);
        }
      }
    }
  }

    public final static String JETTY_PORT = "jetty.port";

    public final static String JETTY_PORT_DEFAULT = "8080";

    private static Properties loadProperties(final File props) throws IllegalArgumentException,
            IOException {
        Properties prop = new Properties();
        if (props == null || !props.exists()) {
            throw new IllegalArgumentException("Bad file name argument: " + props);
        }
        FileInputStream is = null;
        try {
            is = new FileInputStream(props);
            prop.load(is);
        } finally {
            if (is != null)
                is.close();
        }

        return prop;
    }

    private static int parseInt(String portVariable) {
        if (portVariable == null) {
            return -1;
        }

        try {
            return Integer.valueOf(portVariable).intValue();
        } catch (NumberFormatException e) {
            return -1;
        }
    }

    private static SocketConnector configureConnection(final Properties prop) {
        // don't even think of serving more than XX requests in parallel...
        // we have a limit in our processing and memory capacities
        BoundedThreadPool tp = new BoundedThreadPool();
        tp.setMaxThreads(50);

        SocketConnector conn = new SocketConnector();

        conn.setPort(parseInt(prop.getProperty(JETTY_PORT, JETTY_PORT_DEFAULT)));
        conn.setThreadPool(tp);
        conn.setAcceptQueueSize(100);

        return conn;
    }

    public final static String CONTEXT_PATH = "context.path";

    public final static String CONTEXT_PATH_DEFAULT = "/geobatch";

    public final static String WAR_PATH = "war.path";

    public final static String WAR_PATH_DEFAULT = "src/main/webapp";

    public final static String TEMP_DIR = "temp.dir";

    public final static String TEMP_DIR_DEFAULT = "target/work";

    private static WebAppContext configureContext(final Properties prop) {
        WebAppContext wah = new WebAppContext();

        wah.setContextPath(prop.getProperty(CONTEXT_PATH, CONTEXT_PATH_DEFAULT));
        wah.setWar(prop.getProperty(WAR_PATH, WAR_PATH_DEFAULT));
        wah.setTempDirectory(new File(prop.getProperty(TEMP_DIR, TEMP_DIR_DEFAULT)));
        return wah;
    }

    private static void setSystemProperties(final Properties prop) {
        Iterator<?> it = prop.keySet().iterator();
        while (it.hasNext()) {
            Object key = it.next();
            System.setProperty(key.toString(), prop.get(key).toString());
        }
    }
}
TOP

Related Classes of org.geoserver.web.Start

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.