⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 farmwardeployer.java

📁 精通tomcat书籍原代码,希望大家共同学习
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * Remove an existing web application, attached to the specified context     * path. If this application is successfully removed, a ContainerEvent of     * type <code>REMOVE_EVENT</code> will be sent to all registered     * listeners, with the removed <code>Context</code> as an argument.     * Deletes the web application war file and/or directory if they exist in     * the Host's appBase.     *      * @param contextPath     *            The context path of the application to be removed     * @param undeploy     *            boolean flag to remove web application from server     *      * @exception IllegalArgumentException     *                if the specified context path is malformed (it must be ""     *                or start with a slash)     * @exception IllegalArgumentException     *                if the specified context path does not identify a     *                currently installed web application     * @exception IOException     *                if an input/output error occurs during removal     */    public void remove(String contextPath, boolean undeploy) throws IOException {        if (log.isInfoEnabled())            log.info("Cluster wide remove of web app " + contextPath);        Member localMember = getCluster().getLocalMember();        UndeployMessage msg = new UndeployMessage(localMember, System                .currentTimeMillis(), "Undeploy:" + contextPath + ":"                + System.currentTimeMillis(), contextPath, undeploy);        if (log.isDebugEnabled())            log.debug("Send cluster wide undeployment from "                    + contextPath );        cluster.send(msg);        // remove locally        if (undeploy) {            try {                if (!isServiced(contextPath)) {                    addServiced(contextPath);                    try {                        remove(contextPath);                    } finally {                        removeServiced(contextPath);                    }                } else                    log.error("Local remove from " + contextPath                            + "failed, other manager has app in service!");            } catch (Exception ex) {                log.error("local remove from " + contextPath + " failed", ex);            }        }    }    /*     * Modifcation from watchDir war detected!     *      * @see org.apache.catalina.cluster.deploy.FileChangeListener#fileModified(java.io.File)     */    public void fileModified(File newWar) {        try {            File deployWar = new File(getDeployDir(), newWar.getName());            copy(newWar, deployWar);            String contextName = getContextName(deployWar);            if (log.isInfoEnabled())                log.info("Installing webapp[" + contextName + "] from "                        + deployWar.getAbsolutePath());            try {                remove(contextName, false);            } catch (Exception x) {                log.error("No removal", x);            }            install(contextName, deployWar.toURL());        } catch (Exception x) {            log.error("Unable to install WAR file", x);        }    }    /*     * War remvoe from watchDir     *      * @see org.apache.catalina.cluster.deploy.FileChangeListener#fileRemoved(java.io.File)     */    public void fileRemoved(File removeWar) {        try {            String contextName = getContextName(removeWar);            if (log.isInfoEnabled())                log.info("Removing webapp[" + contextName + "]");            remove(contextName, true);        } catch (Exception x) {            log.error("Unable to remove WAR file", x);        }    }    /**     * Create a context path from war     * @param war War filename     * @return '/filename' or if war name is ROOT.war context name is empty string ''      */    protected String getContextName(File war) {        String contextName = "/"        + war.getName().substring(0,                war.getName().lastIndexOf(".war"));        if("/ROOT".equals(contextName))            contextName= "" ;        return contextName ;    }        /**     * Given a context path, get the config file name.     */    protected String getConfigFile(String path) {        String basename = null;        if (path.equals("")) {            basename = "ROOT";        } else {            basename = path.substring(1).replace('/', '#');        }        return (basename);    }    /**     * Given a context path, get the config file name.     */    protected String getDocBase(String path) {        String basename = null;        if (path.equals("")) {            basename = "ROOT";        } else {            basename = path.substring(1);        }        return (basename);    }    /**     * Return a File object representing the "application root" directory for     * our associated Host.     */    protected File getAppBase() {        if (appBase != null) {            return appBase;        }        File file = new File(host.getAppBase());        if (!file.isAbsolute())            file = new File(System.getProperty("catalina.base"), host                    .getAppBase());        try {            appBase = file.getCanonicalFile();        } catch (IOException e) {            appBase = file;        }        return (appBase);    }    /**     * Invoke the remove method on the deployer.     */    protected void remove(String path) throws Exception {        // TODO Handle remove also work dir content !        // Stop the context first to be nicer        Context context = (Context) host.findChild(path);        if (context != null) {            if(log.isDebugEnabled())                log.debug("Undeploy local context " +path );            ((Lifecycle) context).stop();            File war = new File(getAppBase(), getDocBase(path) + ".war");            File dir = new File(getAppBase(), getDocBase(path));            File xml = new File(configBase, getConfigFile(path) + ".xml");            if (war.exists()) {                war.delete();            } else if (dir.exists()) {                undeployDir(dir);            } else {                xml.delete();            }            // Perform new deployment and remove internal HostConfig state            check(path);        }    }    /**     * Delete the specified directory, including all of its contents and     * subdirectories recursively.     *      * @param dir     *            File object representing the directory to be deleted     */    protected void undeployDir(File dir) {        String files[] = dir.list();        if (files == null) {            files = new String[0];        }        for (int i = 0; i < files.length; i++) {            File file = new File(dir, files[i]);            if (file.isDirectory()) {                undeployDir(file);            } else {                file.delete();            }        }        dir.delete();    }    /*     * Call watcher to check for deploy changes     *      * @see org.apache.catalina.cluster.ClusterDeployer#backgroundProcess()     */    public void backgroundProcess() {        if (started) {            count = (count + 1) % processDeployFrequency;            if (count == 0 && watchEnabled) {                watcher.check();            }        }    }    /*--Deployer Operations ------------------------------------*/    /**     * Invoke the check method on the deployer.     */    protected void check(String name) throws Exception {        String[] params = { name };        String[] signature = { "java.lang.String" };        mBeanServer.invoke(oname, "check", params, signature);    }    /**     * Invoke the check method on the deployer.     */    protected boolean isServiced(String name) throws Exception {        String[] params = { name };        String[] signature = { "java.lang.String" };        Boolean result = (Boolean) mBeanServer.invoke(oname, "isServiced",                params, signature);        return result.booleanValue();    }    /**     * Invoke the check method on the deployer.     */    protected void addServiced(String name) throws Exception {        String[] params = { name };        String[] signature = { "java.lang.String" };        mBeanServer.invoke(oname, "addServiced", params, signature);    }    /**     * Invoke the check method on the deployer.     */    protected void removeServiced(String name) throws Exception {        String[] params = { name };        String[] signature = { "java.lang.String" };        mBeanServer.invoke(oname, "removeServiced", params, signature);    }    /*--Instance Getters/Setters--------------------------------*/    public CatalinaCluster getCluster() {        return cluster;    }    public void setCluster(CatalinaCluster cluster) {        this.cluster = cluster;    }    public boolean equals(Object listener) {        return super.equals(listener);    }    public int hashCode() {        return super.hashCode();    }    public String getDeployDir() {        return deployDir;    }    public void setDeployDir(String deployDir) {        this.deployDir = deployDir;    }    public String getTempDir() {        return tempDir;    }    public void setTempDir(String tempDir) {        this.tempDir = tempDir;    }    public String getWatchDir() {        return watchDir;    }    public void setWatchDir(String watchDir) {        this.watchDir = watchDir;    }    public boolean isWatchEnabled() {        return watchEnabled;    }    public boolean getWatchEnabled() {        return watchEnabled;    }    public void setWatchEnabled(boolean watchEnabled) {        this.watchEnabled = watchEnabled;    }    /**     * Return the frequency of watcher checks.     */    public int getProcessDeployFrequency() {        return (this.processDeployFrequency);    }    /**     * Set the watcher checks frequency.     *      * @param processExpiresFrequency     *            the new manager checks frequency     */    public void setProcessDeployFrequency(int processExpiresFrequency) {        if (processExpiresFrequency <= 0) {            return;        }        this.processDeployFrequency = processExpiresFrequency;    }    /**     * Copy a file to the specified temp directory.     * @param from copy from temp     * @param to   to host appBase directory     * @return true, copy successful     */    protected boolean copy(File from, File to) {        try {            if (!to.exists())                to.createNewFile();            java.io.FileInputStream is = new java.io.FileInputStream(from);            java.io.FileOutputStream os = new java.io.FileOutputStream(to,                    false);            byte[] buf = new byte[4096];            while (true) {                int len = is.read(buf);                if (len < 0)                    break;                os.write(buf, 0, len);            }            is.close();            os.close();        } catch (IOException e) {            log.error("Unable to copy file from:" + from + " to:" + to, e);            return false;        }        return true;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -