Package it.geosolutions.geobatch.jetty

Source Code of it.geosolutions.geobatch.jetty.StartUNREDD

/*
*  GeoBatch - Open Source geospatial batch processing system
*  http://geobatch.geo-solutions.it/
*  Copyright (C) 2007-2012 GeoSolutions S.A.S.
*  http://www.geo-solutions.it
*
*  GPLv3 + Classpath exception
*
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package it.geosolutions.geobatch.jetty;

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

import org.apache.commons.io.IOUtils;
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;

/**
* 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 StartUNREDD {
    private static final Logger log = LoggerFactory.getLogger(StartUNREDD.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);

            // 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 {
            IOUtils.closeQuietly(is);
        }

        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 it.geosolutions.geobatch.jetty.StartUNREDD

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.