/** * 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)); } }
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); }