Java 类org.apache.catalina.startup.ExpandWar 实例源码

项目:spring-osgi    文件:TomcatWarDeployer.java   
/**
 * Stops the given context.
 * 
 * @param catalinaContext
 * @throws OsgiWarDeploymentException
 */
private void stopCatalinaContext(Context catalinaContext) throws OsgiWarDeploymentException {
    String docBase = catalinaContext.getDocBase();
    String contextPath = catalinaContext.getPath();
    String messageEnding = "context [" + contextPath + "] from server " + getServerInfo();

    log.info("About to undeploy " + messageEnding);

    // remove context
    try {
        removeContext(catalinaContext);
        log.info("Context [" + contextPath + "] undeployed successfully from server " + getServerInfo());
    }
    catch (Exception ex) {
        throw new OsgiWarDeploymentException("Cannot undeploy " + messageEnding, ex);
    }
    // try to clean up anyway
    finally {
        if (log.isDebugEnabled())
            log.debug("Cleaning unpacked folder " + docBase);
        // clean unpacked folder
        ExpandWar.delete(new File(docBase));
    }
}
项目:sqoop-on-spark    文件:TomcatToolRunner.java   
public static void main(String[] args) throws Exception {
   // Using Boostrap class to boot the common.loader and other catalina specific
   // class loaders.
   Bootstrap bootstrap = new Bootstrap();
   bootstrap.init();

   // Now we need to add the sqoop webapp classes into the class loader. Sadly
   // we have to do a lot of things ourselves. The procedure is:
    // 1) Unpack Sqoop war file
    // 2) Build the ClassLoader using Tomcat's ClassLoaderFactory

    // Various paths to war file and locations inside the war file
    String webappPath = System.getProperty(PROPERTY_APPBASE_PATH,
            DEFAULT_APPBASE_PATH);
    String catalinaBase = Bootstrap.getCatalinaBase();
    String fullWebappPath = catalinaBase + File.separator + webappPath;
    String fullSqoopWarPath = fullWebappPath + File.separator + "sqoop.war";
    String fullSqoopClassesPath = fullWebappPath + File.separator + "sqoop"
            + File.separator + "WEB-INF" + File.separator + "classes";
    String fullSqoopLibPath = fullWebappPath + File.separator + "sqoop"
            + File.separator + "WEB-INF" + File.separator + "lib";

    // Expand the war into the usual location, this operation is idempotent
    // (nothing bad happens if it's already expanded)
    Embedded embedded = new Embedded();
    Host host = embedded.createHost("Sqoop Tool Virtual Host",
            fullWebappPath);
    ExpandWar
            .expand(host, new URL("jar:file://" + fullSqoopWarPath + "!/"));

    // We have expanded war file, so we build the classloader from
    File[] unpacked = new File[1];
    unpacked[0] = new File(fullSqoopClassesPath);

    File[] packed = new File[1];
    packed[0] = new File(fullSqoopLibPath);

    ClassLoader loader = ClassLoaderFactory.createClassLoader(unpacked,
            packed, Thread.currentThread().getContextClassLoader());
    Thread.currentThread().setContextClassLoader(loader);

    // Finally we can call the usual ToolRunner. We have to use reflection
    // as
    // as the time of loading this class, Sqoop dependencies are not on
    // classpath.
    Class klass = Class.forName("org.apache.sqoop.tools.ToolRunner", true,
            loader);
    Method method = klass.getMethod("main", String[].class);
    method.invoke(null, (Object) args);
}