webappexpanddeploygenerator.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 490 行

JAVA
490
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * *   Free Software Foundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.server.webapp;import com.caucho.config.ConfigException;import com.caucho.git.GitRepository;import com.caucho.loader.Environment;import com.caucho.loader.EnvironmentListener;import com.caucho.server.deploy.DeployContainer;import com.caucho.server.deploy.ExpandDeployGenerator;import com.caucho.server.cluster.Server;import com.caucho.vfs.CaseInsensitive;import com.caucho.vfs.Path;import java.util.ArrayList;import java.util.HashMap;import java.util.Set;import java.util.logging.Level;import java.util.logging.Logger;/** * The generator for the web-app deploy */public class WebAppExpandDeployGenerator  extends ExpandDeployGenerator<WebAppController>  implements EnvironmentListener{  private static final Logger log    = Logger.getLogger(WebAppExpandDeployGenerator.class.getName());  private final WebAppExpandDeployGeneratorAdmin _admin;  private WebAppContainer _container;  private WebAppController _parent;  private String _urlPrefix = "";  private ArrayList<WebAppConfig> _webAppDefaults    = new ArrayList<WebAppConfig>();  private HashMap<Path,WebAppConfig> _webAppConfigMap    = new HashMap<Path,WebAppConfig>();  // Maps from the context-path to the webapps directory  private HashMap<String,Path> _contextPathMap    = new HashMap<String,Path>();  private ClassLoader _parentLoader;  /**   * Creates the new expand deploy.   */  public WebAppExpandDeployGenerator(DeployContainer<WebAppController> container,                                     WebAppContainer webAppContainer)  {    super(container, webAppContainer.getRootDirectory());    _container = webAppContainer;    _parentLoader = webAppContainer.getClassLoader();    try {      setExtension(".war");    } catch (Exception e) {      log.log(Level.WARNING, e.toString(), e);    }    if (Server.getCurrent() != null) {      setGit(Server.getCurrent().getGit());      String hostName = webAppContainer.getHostName();      if ("".equals(hostName))	hostName = "default";          setGitPath("wars/" + hostName);    }    _admin = new WebAppExpandDeployGeneratorAdmin(this);  }  /**   * Gets the webApp container.   */  public WebAppContainer getContainer()  {    return _container;  }  /**   * Sets the parent webApp.   */  public void setParent(WebAppController parent)  {    _parent = parent;  }  /**   * Sets the parent loader.   */  public void setParentClassLoader(ClassLoader loader)  {    _parentLoader = loader;  }  /**   * Sets the url prefix.   */  public void setURLPrefix(String prefix)  {    if (prefix.equals("")) {    }    while (prefix.endsWith("/"))      prefix = prefix.substring(0, prefix.length() - 1);    _urlPrefix = prefix;  }  /**   * Gets the url prefix.   */  public String getURLPrefix()  {    return _urlPrefix;  }  /**   * Sets true for a lazy-init.   */  public void setLazyInit(boolean lazyInit)    throws ConfigException  {    log.config("lazy-init is deprecated.  Use <startup>lazy</startup> instead.");    if (lazyInit)      setStartupMode("lazy");    else      setStartupMode("automatic");  }  /**   * Adds an overriding web-app   */  public void addWebApp(WebAppConfig config)  {    String docDir = config.getDocumentDirectory();    Path appDir = getExpandDirectory().lookup(docDir);    _webAppConfigMap.put(appDir, config);    if (config.getContextPath() != null)      _contextPathMap.put(config.getContextPath(), appDir);  }  /**   * Adds a default.   */  public void addWebAppDefault(WebAppConfig config)  {    _webAppDefaults.add(config);  }  @Override  protected void initImpl()  {    super.initImpl();  }  /**   * Returns the log.   */  @Override  protected Logger getLog()  {    return log;  }  /**   * Returns the deployed keys.   */  @Override  protected void fillDeployedKeys(Set<String> keys)  {    super.fillDeployedKeys(keys);    for (WebAppConfig cfg : _webAppConfigMap.values()) {      if (cfg.getContextPath() != null)        keys.add(cfg.getContextPath());    }  }  /**   * Start the deploy.   */  @Override  protected void startImpl()  {    super.startImpl();    Environment.addEnvironmentListener(this, _parentLoader);    _admin.register();  }  /**   * Returns the new controller.   */  @Override  protected WebAppController createController(String name)  {    if (! name.startsWith(_urlPrefix))      return null;    String segmentName = name.substring(_urlPrefix.length());    Path webAppRoot = _contextPathMap.get(segmentName);    if (webAppRoot != null)      segmentName = "/" + webAppRoot.getTail();    else if (segmentName.indexOf('/', 1) > 0)      return null;    String contextPath = segmentName;    if (segmentName.equals("")) {      if (CaseInsensitive.isCaseInsensitive())        segmentName = "/root";      else        segmentName = "/ROOT";    }    // server/26cg    if (contextPath.equals("/ROOT"))      contextPath = "";    else if (contextPath.equalsIgnoreCase("/root")	     && CaseInsensitive.isCaseInsensitive())      contextPath = "";    ArrayList<String> versionNames = getVersionNames(segmentName);    if (versionNames == null || versionNames.size() == 0) {      return makeController(name,			    _urlPrefix + contextPath,			    _urlPrefix + segmentName);    }    WebAppController controller      = new WebAppVersioningController(name, contextPath, this, _container);    return controller;  }  private WebAppController makeController(String name,					  String contextPath,					  String versionName)  {    String version = "";    String baseName = contextPath;    if (isVersioning()) {      int p = versionName.lastIndexOf('-');            if (p > 0) {	version = versionName.substring(p + 1);	baseName = versionName.substring(0, p);      }    }    int p = versionName.lastIndexOf('/');    String segmentName = versionName.substring(p + 1);        String expandName = getExpandName(segmentName);    String archiveName = segmentName + ".war";    Path jarPath = getArchiveDirectory().lookup("./" + archiveName);    Path rootDirectory;    if (jarPath.isDirectory()) {      //rootDirectory = getExpandDirectory().lookup("./" + archiveName);      // server/10kw      rootDirectory = jarPath;      jarPath = null;    }    else {      // server/003j      rootDirectory = getExpandDirectory().lookup("./" + expandName);    }    Path repRefPath = getGitRefPath(segmentName);    if (! rootDirectory.isDirectory()        && (jarPath == null || ! jarPath.isFile())        && (repRefPath == null || ! repRefPath.isFile()))      return null;    else if (rootDirectory.isDirectory()             && ! isValidDirectory(rootDirectory, versionName.substring(1)))      return null;    WebAppConfig cfg = _webAppConfigMap.get(rootDirectory);    if (cfg != null && cfg.getContextPath() != null) {      baseName = contextPath = cfg.getContextPath();    }    WebAppController controller      = new WebAppController(versionName, contextPath,			     rootDirectory, _container);    controller.setWarName(versionName.substring(1));    controller.setParentWebApp(_parent);    controller.setDynamicDeploy(true);    controller.setSourceType("expand");    controller.setVersion(version);    if (Server.getCurrent() != null) {      GitRepository git = Server.getCurrent().getGit();      controller.setGit(git);      String hostName = _container.getHostName();      if ("".equals(hostName))	hostName = "default";      String ref = "wars/" + hostName + "/" + segmentName;            controller.setGitRefPath(git.getRefPath(ref));    }    if (! baseName.equals(contextPath)) {      WebAppController versionController	= _container.getWebAppGenerator().findController(baseName);            if (versionController instanceof WebAppVersioningController) {	((WebAppVersioningController) versionController).setModified(true);      }    }    return controller;  }  /**   * Returns the current array of webApp entries.   */  @Override  protected WebAppController mergeController(WebAppController controller,                                             String key)  {    try {      Path expandDirectory = getExpandDirectory();      Path rootDirectory = controller.getRootDirectory();      if (! expandDirectory.equals(rootDirectory.getParent()))        return controller;      controller = super.mergeController(controller, key);      if (controller.getArchivePath() == null) {        String archiveName = rootDirectory.getTail() + ".war";        Path jarPath = getArchiveDirectory().lookup(archiveName);        if (! jarPath.isDirectory()) {          controller.setArchivePath(jarPath);          controller.addDepend(jarPath);        }      }      if (controller.getGitRefPath() == null && getGit() != null) {	String refPath = "wars/default/" + rootDirectory.getTail();		controller.setGitRefPath(getGit().getRefPath(refPath));      }      controller.setStartupMode(getStartupMode());      // controller.setRedeployMode(getRedeployMode());      for (int i = 0; i < _webAppDefaults.size(); i++)        controller.addConfigDefault(_webAppDefaults.get(i));      WebAppConfig cfg = _webAppConfigMap.get(rootDirectory);      if (cfg != null)        controller.addConfigDefault(cfg);    } catch (ConfigException e) {      log.warning(e.toString());      log.log(Level.FINEST, e.toString(), e);      controller.setConfigException(e);    } catch (Throwable e) {      log.log(Level.WARNING, e.toString(), e);      controller.setConfigException(e);    }    return controller;  }  /**   * Converts the name.   */  @Override  protected String pathNameToEntryName(String name)  {    String entryName = super.pathNameToEntryName(name);    if (entryName == null)      return null;    if (CaseInsensitive.isCaseInsensitive()) {      try {        String []list = getExpandDirectory().list();        String matchName = null;        for (int i = 0; i < list.length; i++) {          if (list[i].equalsIgnoreCase(entryName))            matchName = list[i];        }        if (matchName == null)          matchName = entryName.toLowerCase();      } catch (Exception e) {        entryName = entryName.toLowerCase();      }    }    if (entryName.equalsIgnoreCase("root"))      return _urlPrefix;    else      return _urlPrefix + "/" + entryName;  }  @Override  protected String entryNameToArchiveName(String entryName)  {    String prefix = _urlPrefix + "/";    if (entryName.equals(_urlPrefix))      return "ROOT" + getExtension();    else if (entryName.startsWith(prefix))      return entryName.substring(prefix.length()) + getExtension();    else      return null;  }  /**   * Destroy the deployment.   */  @Override  protected void destroyImpl()  {    _admin.unregister();    _container.removeWebAppDeploy(this);    Environment.removeEnvironmentListener(this, _parentLoader);    super.destroyImpl();  }}

⌨️ 快捷键说明

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