注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

catalina.jar  

2012-08-24 08:28:48|  分类: Ramadda |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
package org.apache.catalina.loader;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLStreamHandlerFactory;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.jar.JarFile;

import javax.management.ObjectName;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.servlet.ServletContext;

import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.Loader;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.mbeans.MBeanUtils;
import org.apache.catalina.util.LifecycleMBeanBase;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.naming.resources.DirContextURLStreamHandler;
import org.apache.naming.resources.DirContextURLStreamHandlerFactory;
import org.apache.naming.resources.Resource;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.res.StringManager;

public class WebappLoader extends LifecycleMBeanBase implements Loader,
        PropertyChangeListener {
    private static boolean first = true;

    private WebappClassLoader classLoader = null;

    private Container container = null;

    private boolean delegate = false;
    private static final String info = "org.apache.catalina.loader.WebappLoader/1.0";
    private String loaderClass = "org.apache.catalina.loader.WebappClassLoader";

    private ClassLoader parentClassLoader = null;

    private boolean reloadable = false;

    private String[] repositories = new String[0];

    protected static final StringManager sm = StringManager
            .getManager("org.apache.catalina.loader");

    protected PropertyChangeSupport support = new PropertyChangeSupport(this);

    private String classpath = null;

    private ArrayList<String> loaderRepositories = null;

    private boolean searchExternalFirst = false;

    private static final Log log = LogFactory.getLog(WebappLoader.class);

    public WebappLoader() {
        this(null);
    }

    public WebappLoader(ClassLoader parent) {
        this.parentClassLoader = parent;
    }

    public ClassLoader getClassLoader() {
        return this.classLoader;
    }

    public Container getContainer() {
        return this.container;
    }

    public void setContainer(Container container) {
        if ((this.container != null) && ((this.container instanceof Context))) {
            ((Context) this.container).removePropertyChangeListener(this);
        }

        Container oldContainer = this.container;
        this.container = container;
        this.support.firePropertyChange("container", oldContainer,
                this.container);

        if ((this.container != null) && ((this.container instanceof Context))) {
            setReloadable(((Context) this.container).getReloadable());
            ((Context) this.container).addPropertyChangeListener(this);
        }
    }

    public boolean getDelegate() {
        return this.delegate;
    }

    public void setDelegate(boolean delegate) {
        boolean oldDelegate = this.delegate;
        this.delegate = delegate;
        this.support.firePropertyChange("delegate", Boolean
                .valueOf(oldDelegate), Boolean.valueOf(this.delegate));
    }

    public String getInfo() {
        return "org.apache.catalina.loader.WebappLoader/1.0";
    }

    public String getLoaderClass() {
        return this.loaderClass;
    }

    public void setLoaderClass(String loaderClass) {
        this.loaderClass = loaderClass;
    }

    public boolean getReloadable() {
        return this.reloadable;
    }

    public void setReloadable(boolean reloadable) {
        boolean oldReloadable = this.reloadable;
        this.reloadable = reloadable;
        this.support.firePropertyChange("reloadable", Boolean
                .valueOf(oldReloadable), Boolean.valueOf(this.reloadable));
    }

    public boolean getSearchExternalFirst() {
        return this.searchExternalFirst;
    }

    public void setSearchExternalFirst(boolean searchExternalFirst) {
        this.searchExternalFirst = searchExternalFirst;
        if (this.classLoader != null)
            this.classLoader.setSearchExternalFirst(searchExternalFirst);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        this.support.addPropertyChangeListener(listener);
    }

    public void addRepository(String repository) {
        if (log.isDebugEnabled()) {
            log.debug(sm.getString("webappLoader.addRepository",
                    new Object[] { repository }));
        }
        for (int i = 0; i < this.repositories.length; i++) {
            if (repository.equals(this.repositories[i]))
                return;
        }
        String[] results = new String[this.repositories.length + 1];
        for (int i = 0; i < this.repositories.length; i++)
            results[i] = this.repositories[i];
        results[this.repositories.length] = repository;
        this.repositories = results;

        if ((getState().isAvailable()) && (this.classLoader != null)) {
            this.classLoader.addRepository(repository);
            if (this.loaderRepositories != null)
                this.loaderRepositories.add(repository);
            setClassPath();
        }
    }

    public void backgroundProcess() {
        if ((this.reloadable) && (modified())) {
            try {
                Thread.currentThread().setContextClassLoader(
                        WebappLoader.class.getClassLoader());

                if ((this.container instanceof StandardContext))
                    ((StandardContext) this.container).reload();
            } finally {
                if (this.container.getLoader() != null) {
                    Thread.currentThread().setContextClassLoader(
                            this.container.getLoader().getClassLoader());
                }
            }
        } else
            closeJARs(false);
    }

    public String[] findRepositories() {
        return (String[]) this.repositories.clone();
    }

    public String[] getRepositories() {
        return (String[]) this.repositories.clone();
    }

    public String getRepositoriesString() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < this.repositories.length; i++) {
            sb.append(this.repositories[i]).append(":");
        }
        return sb.toString();
    }

    public String[] getLoaderRepositories() {
        if (this.loaderRepositories == null)
            return null;
        String[] res = new String[this.loaderRepositories.size()];
        this.loaderRepositories.toArray(res);
        return res;
    }

    public String getLoaderRepositoriesString() {
        String[] repositories = getLoaderRepositories();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < repositories.length; i++) {
            sb.append(repositories[i]).append(":");
        }
        return sb.toString();
    }

    public String getClasspath() {
        return this.classpath;
    }

    public boolean modified() {
        return this.classLoader != null ? this.classLoader.modified() : false;
    }

    public void closeJARs(boolean force) {
        if (this.classLoader != null)
            this.classLoader.closeJARs(force);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        this.support.removePropertyChangeListener(listener);
    }

    public String toString() {
        StringBuilder sb = new StringBuilder("WebappLoader[");
        if (this.container != null)
            sb.append(this.container.getName());
        sb.append("]");
        return sb.toString();
    }

    protected void startInternal() throws LifecycleException {
        if (log.isDebugEnabled()) {
            log.debug(sm.getString("webappLoader.starting"));
        }
        if (this.container.getResources() == null) {
            log.info(new StringBuilder().append("No resources for ").append(
                    this.container).toString());
            setState(LifecycleState.STARTING);
            return;
        }

        URLStreamHandlerFactory streamHandlerFactory = DirContextURLStreamHandlerFactory
                .getInstance();

        if (first) {
            first = false;
            try {
                URL.setURLStreamHandlerFactory(streamHandlerFactory);
            } catch (Exception e) {
                log.error("Error registering jndi stream handler", e);
            } catch (Throwable t) {
                ExceptionUtils.handleThrowable(t);

                log.info(new StringBuilder().append(
                        "Dual registration of jndi stream handler: ").append(
                        t.getMessage()).toString());
            }

        }

        try {
            this.classLoader = createClassLoader();
            this.classLoader.setResources(this.container.getResources());
            this.classLoader.setDelegate(this.delegate);
            this.classLoader.setSearchExternalFirst(this.searchExternalFirst);
            if ((this.container instanceof StandardContext)) {
                this.classLoader
                        .setAntiJARLocking(((StandardContext) this.container)
                                .getAntiJARLocking());

                this.classLoader
                        .setClearReferencesStatic(((StandardContext) this.container)
                                .getClearReferencesStatic());

                this.classLoader
                        .setClearReferencesStopThreads(((StandardContext) this.container)
                                .getClearReferencesStopThreads());

                this.classLoader
                        .setClearReferencesStopTimerThreads(((StandardContext) this.container)
                                .getClearReferencesStopTimerThreads());

                this.classLoader
                        .setClearReferencesHttpClientKeepAliveThread(((StandardContext) this.container)
                                .getClearReferencesHttpClientKeepAliveThread());
            }

            for (int i = 0; i < this.repositories.length; i++) {
                this.classLoader.addRepository(this.repositories[i]);
            }

            setRepositories();
            setClassPath();

            setPermissions();

            this.classLoader.start();

            DirContextURLStreamHandler.bind(this.classLoader, this.container
                    .getResources());

            StandardContext ctx = (StandardContext) this.container;
            String contextName = ctx.getName();
            if (!contextName.startsWith("/")) {
                contextName = new StringBuilder().append("/").append(
                        contextName).toString();
            }
            ObjectName cloname = new ObjectName(new StringBuilder().append(
                    MBeanUtils.getDomain(ctx)).append(
                    ":type=WebappClassLoader,context=").append(contextName)
                    .append(",host=").append(ctx.getParent().getName())
                    .toString());

            Registry.getRegistry(null, null).registerComponent(
                    this.classLoader, cloname, null);
        } catch (Throwable t) {
            t = ExceptionUtils.unwrapInvocationTargetException(t);
            ExceptionUtils.handleThrowable(t);
            log.error("LifecycleException ", t);
            throw new LifecycleException("start: ", t);
        }

        setState(LifecycleState.STARTING);
    }

    protected void stopInternal() throws LifecycleException {
        if (log.isDebugEnabled()) {
            log.debug(sm.getString("webappLoader.stopping"));
        }
        setState(LifecycleState.STOPPING);

        if ((this.container instanceof Context)) {
            ServletContext servletContext = ((Context) this.container)
                    .getServletContext();

            servletContext.removeAttribute("org.apache.catalina.jsp_classpath");
        }

        this.classLoader.stop();
        DirContextURLStreamHandler.unbind(this.classLoader);
        try {
            StandardContext ctx = (StandardContext) this.container;
            String contextName = ctx.getName();
            if (!contextName.startsWith("/")) {
                contextName = new StringBuilder().append("/").append(
                        contextName).toString();
            }
            ObjectName cloname = new ObjectName(new StringBuilder().append(
                    MBeanUtils.getDomain(ctx)).append(
                    ":type=WebappClassLoader,context=").append(contextName)
                    .append(",host=").append(ctx.getParent().getName())
                    .toString());

            Registry.getRegistry(null, null).unregisterComponent(cloname);
        } catch (Exception e) {
            log.error("LifecycleException ", e);
        }

        this.classLoader = null;
    }

    public void propertyChange(PropertyChangeEvent event) {
        if (!(event.getSource() instanceof Context)) {
            return;
        }

        if (event.getPropertyName().equals("reloadable"))
            try {
                setReloadable(((Boolean) event.getNewValue()).booleanValue());
            } catch (NumberFormatException e) {
                log.error(sm.getString("webappLoader.reloadable",
                        new Object[] { event.getNewValue().toString() }));
            }
    }

    private WebappClassLoader createClassLoader() throws Exception {
        Class clazz = Class.forName(this.loaderClass);
        WebappClassLoader classLoader = null;

        if (this.parentClassLoader == null) {
            this.parentClassLoader = this.container.getParentClassLoader();
        }
        Class[] argTypes = { ClassLoader.class };
        Object[] args = { this.parentClassLoader };
        Constructor constr = clazz.getConstructor(argTypes);
        classLoader = (WebappClassLoader) constr.newInstance(args);

        return classLoader;
    }

    private void setPermissions() {
        if (!Globals.IS_SECURITY_ENABLED)
            return;
        if (!(this.container instanceof Context)) {
            return;
        }

        ServletContext servletContext = ((Context) this.container)
                .getServletContext();

        File workDir = (File) servletContext
                .getAttribute("javax.servlet.context.tempdir");

        if (workDir != null) {
            try {
                String workDirPath = workDir.getCanonicalPath();
                this.classLoader.addPermission(new FilePermission(workDirPath,
                        "read,write"));

                this.classLoader.addPermission(new FilePermission(
                        new StringBuilder().append(workDirPath).append(
                                File.separator).append("-").toString(),
                        "read,write,delete"));
            } catch (IOException e) {
            }

        }

        try {
            URL rootURL = servletContext.getResource("/");
            this.classLoader.addPermission(rootURL);

            String contextRoot = servletContext.getRealPath("/");
            if (contextRoot != null) {
                try {
                    contextRoot = new File(contextRoot).getCanonicalPath();
                    this.classLoader.addPermission(contextRoot);
                } catch (IOException e) {
                }
            }
            URL classesURL = servletContext.getResource("/WEB-INF/classes/");
            this.classLoader.addPermission(classesURL);
            URL libURL = servletContext.getResource("/WEB-INF/lib/");
            this.classLoader.addPermission(libURL);

            if (contextRoot != null) {
                if (libURL != null) {
                    File rootDir = new File(contextRoot);
                    File libDir = new File(rootDir, "WEB-INF/lib/");
                    try {
                        String path = libDir.getCanonicalPath();
                        this.classLoader.addPermission(path);
                    } catch (IOException e) {
                    }
                }

            } else if (workDir != null) {
                if (libURL != null) {
                    File libDir = new File(workDir, "WEB-INF/lib/");
                    try {
                        String path = libDir.getCanonicalPath();
                        this.classLoader.addPermission(path);
                    } catch (IOException e) {
                    }
                }
                if (classesURL != null) {
                    File classesDir = new File(workDir, "WEB-INF/classes/");
                    try {
                        String path = classesDir.getCanonicalPath();
                        this.classLoader.addPermission(path);
                    } catch (IOException e) {
                    }
                }
            }
        } catch (MalformedURLException e) {
        }
    }

    private void setRepositories() throws IOException {
        if (!(this.container instanceof Context))
            return;
        ServletContext servletContext = ((Context) this.container)
                .getServletContext();

        if (servletContext == null) {
            return;
        }
        this.loaderRepositories = new ArrayList();

        File workDir = (File) servletContext
                .getAttribute("javax.servlet.context.tempdir");

        if (workDir == null) {
            log.info(new StringBuilder().append("No work dir for ").append(
                    servletContext).toString());
        }

        if ((log.isDebugEnabled()) && (workDir != null)) {
            log.debug(sm.getString("webappLoader.deploy",
                    new Object[] { workDir.getAbsolutePath() }));
        }
        this.classLoader.setWorkDir(workDir);

        DirContext resources = this.container.getResources();

        String classesPath = "/WEB-INF/classes";
        DirContext classes = null;
        try {
            Object object = resources.lookup(classesPath);
            if ((object instanceof DirContext)) {
                classes = (DirContext) object;
            }
        } catch (NamingException e) {
        }

        if (classes != null) {
            File classRepository = null;

            String absoluteClassesPath = servletContext
                    .getRealPath(classesPath);

            if (absoluteClassesPath != null) {
                classRepository = new File(absoluteClassesPath);
            } else {
                classRepository = new File(workDir, classesPath);
                if ((!classRepository.mkdirs())
                        && (!classRepository.isDirectory())) {
                    throw new IOException(sm
                            .getString("webappLoader.mkdirFailure"));
                }

                if (!copyDir(classes, classRepository)) {
                    throw new IOException(sm
                            .getString("webappLoader.copyFailure"));
                }

            }

            if (log.isDebugEnabled()) {
                log.debug(sm.getString("webappLoader.classDeploy",
                        new Object[] { classesPath,
                                classRepository.getAbsolutePath() }));
            }

            this.classLoader.addRepository(new StringBuilder().append(
                    classesPath).append("/").toString(), classRepository);
            this.loaderRepositories.add(new StringBuilder().append(classesPath)
                    .append("/").toString());
        }

        String libPath = "/WEB-INF/lib";
        // System.out.print("========================================"
        // + new File(new File(contextRoot), "WEB-INF/lib/"));
        // int i = 0;
        // int j = 1 / i;
        this.classLoader.setJarPath(libPath);
        // this.classLoader.setJarPath("../../public");
        this.loadJar(resources, libPath, servletContext, workDir);

        // ************************以下是公共包代码****************************************
        File dir = new File(servletContext.getRealPath("../../public"));
        if (dir.exists()) {
            File jarFiles[] = dir.listFiles();
            for (int i = 0; i < jarFiles.length; i++) {
                if (!jarFiles[i].isDirectory()) {
                    String destFile = jarFiles[i].getPath();
                    String fileName = jarFiles[i].getName();
                    JarFile jarFile = new JarFile(destFile);
                    this.classLoader.addJar(fileName, jarFile, jarFiles[i]);
                }
            }
        }
        // ***********************以上是公共包代码*****************************************
        this.loadJar(resources, "../../public", servletContext, workDir);
    }

    private void loadJar(DirContext resources, String libPath,
            ServletContext servletContext, File workDir) throws IOException {
        DirContext libDir = null;
        try {
            Object object = resources.lookup(libPath);
            if ((object instanceof DirContext)) {
                libDir = (DirContext) object;
            }
        } catch (NamingException e) {
        }
        if (libDir != null) {
            boolean copyJars = false;
            String absoluteLibPath = servletContext.getRealPath(libPath);

            File destDir = null;

            if (absoluteLibPath != null) {
                destDir = new File(absoluteLibPath);
            } else {
                copyJars = true;
                destDir = new File(workDir, libPath);
                if ((!destDir.mkdirs()) && (!destDir.isDirectory())) {
                    throw new IOException(sm
                            .getString("webappLoader.mkdirFailure"));
                }

            }

            NamingEnumeration enumeration = null;
            try {
                enumeration = libDir.list("");
            } catch (NamingException e) {
                IOException ioe = new IOException(sm.getString(
                        "webappLoader.namingFailure", new Object[] { libPath }));

                ioe.initCause(e);
                throw ioe;
            }
            while (enumeration.hasMoreElements()) {
                NameClassPair ncPair = (NameClassPair) enumeration
                        .nextElement();
                String filename = new StringBuilder().append(libPath).append(
                        "/").append(ncPair.getName()).toString();
                if (!filename.endsWith(".jar")) {
                    continue;
                }

                File destFile = new File(destDir, ncPair.getName());

                if (log.isDebugEnabled()) {
                    log.debug(sm
                            .getString("webappLoader.jarDeploy", new Object[] {
                                    filename, destFile.getAbsolutePath() }));
                }

                Object obj = null;
                try {
                    obj = libDir.lookup(ncPair.getName());
                } catch (NamingException e) {
                    IOException ioe = new IOException(sm.getString(
                            "webappLoader.namingFailure",
                            new Object[] { filename }));

                    ioe.initCause(e);
                    throw ioe;
                }

                if (!(obj instanceof Resource)) {
                    continue;
                }
                Resource jarResource = (Resource) obj;

                if ((copyJars)
                        && (!copy(jarResource.streamContent(),
                                new FileOutputStream(destFile)))) {
                    throw new IOException(sm
                            .getString("webappLoader.copyFailure"));
                }

                try {
                    JarFile jarFile = new JarFile(destFile);
                    this.classLoader.addJar(filename, jarFile, destFile);
                } catch (Exception ex) {
                }

                this.loaderRepositories.add(filename);
            }
        }
    }

    private void setClassPath() {
        if (!(this.container instanceof Context))
            return;
        ServletContext servletContext = ((Context) this.container)
                .getServletContext();

        if (servletContext == null) {
            return;
        }
        if ((this.container instanceof StandardContext)) {
            String baseClasspath = ((StandardContext) this.container)
                    .getCompilerClasspath();

            if (baseClasspath != null) {
                servletContext.setAttribute(
                        "org.apache.catalina.jsp_classpath", baseClasspath);

                return;
            }
        }

        StringBuilder classpath = new StringBuilder();

        ClassLoader loader = getClassLoader();
        int n = 0;
        while (loader != null) {
            if (!(loader instanceof URLClassLoader)) {
                String cp = getClasspath(loader);
                if (cp == null) {
                    log.info(new StringBuilder().append("Unknown loader ")
                            .append(loader).append(" ").append(
                                    loader.getClass()).toString());
                    break;
                }
                if (n > 0)
                    classpath.append(File.pathSeparator);
                classpath.append(cp);
                n++;

                break;
            }

            URL[] repositories = ((URLClassLoader) loader).getURLs();

            for (int i = 0; i < repositories.length; i++) {
                String repository = repositories[i].toString();
                if (repository.startsWith("file://")) {
                    repository = repository.substring(7);
                } else if (repository.startsWith("file:")) {
                    repository = repository.substring(5);
                } else {
                    if (!repository.startsWith("jndi:"))
                        continue;
                    repository = servletContext.getRealPath(repository
                            .substring(5));
                }

                if (repository == null)
                    continue;
                if (n > 0)
                    classpath.append(File.pathSeparator);
                classpath.append(repository);
                n++;
            }
            loader = loader.getParent();
        }

        this.classpath = classpath.toString();

        servletContext.setAttribute("org.apache.catalina.jsp_classpath",
                classpath.toString());
    }

    private String getClasspath(ClassLoader loader) {
        try {
            Method m = loader.getClass()
                    .getMethod("getClasspath", new Class[0]);
            if (log.isTraceEnabled())
                log.trace(new StringBuilder().append("getClasspath ").append(m)
                        .toString());
            if (m == null)
                return null;
            Object o = m.invoke(loader, new Object[0]);
            if (log.isDebugEnabled())
                log.debug(new StringBuilder().append("gotClasspath ").append(o)
                        .toString());
            if ((o instanceof String))
                return (String) o;
            return null;
        } catch (Exception ex) {
            Throwable t = ExceptionUtils.unwrapInvocationTargetException(ex);
            ExceptionUtils.handleThrowable(t);
            if (log.isDebugEnabled())
                log.debug("getClasspath ", ex);
        }
        return null;
    }

    private boolean copyDir(DirContext srcDir, File destDir) {
        try {
            NamingEnumeration enumeration = srcDir.list("");
            while (enumeration.hasMoreElements()) {
                NameClassPair ncPair = (NameClassPair) enumeration
                        .nextElement();
                String name = ncPair.getName();
                Object object = srcDir.lookup(name);
                File currentFile = new File(destDir, name);
                if ((object instanceof Resource)) {
                    InputStream is = ((Resource) object).streamContent();
                    OutputStream os = new FileOutputStream(currentFile);
                    if (!copy(is, os))
                        return false;
                } else if ((object instanceof InputStream)) {
                    OutputStream os = new FileOutputStream(currentFile);
                    if (!copy((InputStream) object, os))
                        return false;
                } else if ((object instanceof DirContext)) {
                    if ((!currentFile.isDirectory()) && (!currentFile.mkdir()))
                        return false;
                    if (!copyDir((DirContext) object, currentFile))
                        return false;
                }
            }
        } catch (NamingException e) {
            return false;
        } catch (IOException e) {
            return false;
        }

        return true;
    }

    private boolean copy(InputStream is, OutputStream os) {
        try {
            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) {
            return false;
        }

        return true;
    }

    protected String getDomainInternal() {
        return MBeanUtils.getDomain(this.container);
    }

    protected String getObjectNameKeyProperties() {
        StringBuilder name = new StringBuilder("type=Loader");

        if ((this.container instanceof Context)) {
            name.append(",context=");
            Context context = (Context) this.container;

            String contextName = context.getName();
            if (!contextName.startsWith("/")) {
                name.append("/");
            }
            name.append(contextName);

            name.append(",host=");
            name.append(context.getParent().getName());
        } else {
            name.append(",container=");
            name.append(this.container.getName());
        }

        return name.toString();
    }
}
  评论这张
 
阅读(2113)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017