Package com.netflix.staash.embedded

Source Code of com.netflix.staash.embedded.TomcatServer

package com.netflix.staash.embedded;

import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Embedded;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TomcatServer {
    private Embedded tomcat;
    private int port;
    private boolean isRunning;

    private static final Logger LOG = LoggerFactory.getLogger(TomcatServer.class);
    private static final boolean isInfo = LOG.isInfoEnabled();

    public TomcatServer(String contextPath, int port, String appBase, boolean shutdownHook) {
        if(contextPath == null || appBase == null || appBase.length() == 0) {
            throw new IllegalArgumentException("Context path or appbase should not be null");
        }
        if(!contextPath.startsWith("/")) {
            contextPath = "/" + contextPath;
        }

        this.port = port;

        tomcat  = new Embedded();
        tomcat.setName("TomcatEmbeddedtomcat");

        Host localHost = tomcat.createHost("localhost", appBase);
        localHost.setAutoDeploy(false);

        StandardContext rootContext = (StandardContext) tomcat.createContext(contextPath, "webapp");
        rootContext.setDefaultWebXml("web.xml");
        localHost.addChild(rootContext);

        Engine engine = tomcat.createEngine();
        engine.setDefaultHost(localHost.getName());
        engine.setName("TomcatEngine");
        engine.addChild(localHost);

        tomcat.addEngine(engine);

        Connector connector = tomcat.createConnector(localHost.getName(), port, false);
        tomcat.addConnector(connector);

        // register shutdown hook
        if(shutdownHook) {
            Runtime.getRuntime().addShutdownHook(new Thread() {
                public void run() {
                    if(isRunning) {
                        if(isInfo) LOG.info("Stopping the Tomcat tomcat, through shutdown hook");
                        try {
                            if (tomcat != null) {
                                tomcat.stop();
                            }
                        } catch (LifecycleException e) {
                            LOG.error("Error while stopping the Tomcat tomcat, through shutdown hook", e);
                        }
                    }
                }
            });
        }

    }

    /**
     * Start the tomcat embedded tomcat
     */
    public void start() throws LifecycleException {
        if(isRunning) {
            LOG.warn("Tomcat tomcat is already running @ port={}; ignoring the start", port);
            return;
        }

        if(isInfo) LOG.info("Starting the Tomcat tomcat @ port={}", port);

        tomcat.setAwait(true);
        tomcat.start();
        isRunning = true;
    }

    /**
     * Stop the tomcat embedded tomcat
     */
    public void stop() throws LifecycleException {
        if(!isRunning) {
            LOG.warn("Tomcat tomcat is not running @ port={}", port);
            return;
        }

        if(isInfo) LOG.info("Stopping the Tomcat tomcat");

        tomcat.stop();
        isRunning = false;
    }

    public boolean isRunning() {
        return isRunning;
    }
    public static void main(String[] args) throws Exception{
      TomcatServer tomcat = new TomcatServer("staash.war", 8080, "src/main", true);
      tomcat.start();
      Thread.sleep(1000000);
      // TODO Auto-generated catch block
    }
}
TOP

Related Classes of com.netflix.staash.embedded.TomcatServer

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.