webappversioningcontroller.java

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

JAVA
269
字号
/* * 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.util.L10N;import com.caucho.util.Alarm;import java.util.*;import java.util.logging.Logger;/** * A configuration entry for a versioning web-app. */public class WebAppVersioningController extends WebAppController {  private static final L10N L = new L10N(WebAppVersioningController.class);  private static final Logger log    = Logger.getLogger(WebAppController.class.getName());  private static final long EXPIRE_PERIOD = 3600 * 1000L;  private long _versionRolloverTime = EXPIRE_PERIOD;    private ArrayList<WebAppController> _controllerList    = new ArrayList<WebAppController>();  private final WebAppExpandDeployGenerator _generator;  private long _restartTime;    private WebAppController _primaryController;  private boolean _isModified = true;  public WebAppVersioningController(String name,				    String contextPath,				    WebAppExpandDeployGenerator generator,				    WebAppContainer container)  {    super(name, contextPath, null, container);    _generator = generator;  }  void setModified(boolean isModified)  {    _isModified = isModified;  }  @Override  public String getVersion()  {    if (_primaryController != null)      return _primaryController.getVersion();    else      return "";  }  /**   * Returns the instance for a top-level request   * @return the request object or null for none.   */  @Override  public WebApp request()  {    if (_isModified)      updateVersion();    WebAppController controller = _primaryController;    if (controller != null)      return controller.request();    else      return null;  }  /**   * Returns the instance for a subrequest.   *   * @return the request object or null for none.   */  @Override  public WebApp subrequest()  {    if (_isModified)      updateVersion();    WebAppController controller = _primaryController;    if (controller != null)      return controller.request();    else      return null;  }  /**   * Starts the entry.   */  @Override  protected WebApp startImpl()  {    if (_isModified)      updateVersion();    WebAppController controller = _primaryController;    if (controller != null)      return controller.request();    else      return null;  }  /**   * Initialize the controller.   */  @Override  protected void initBegin()  {    /*    super.initBegin();    */  }  private void updateVersion()  {    synchronized (this) {      if (! _isModified)	return;      _isModified = false;            _controllerList = new ArrayList<WebAppController>();      ArrayList<String> versionNames = _generator.getVersionNames(getId());      if (versionNames != null) {	Collections.sort(versionNames, new VersionNameComparator());		for (int i = 0; i < versionNames.size() && i < 2; i++) {	  String versionName = versionNames.get(i);	  WebAppController newController	    = _container.getWebAppGenerator().findController(versionName);	  _controllerList.add(newController);	}	//Collections.sort(_controllerList, new VersionComparator());    	_primaryController = _controllerList.get(0);	if (_restartTime > 0 && _controllerList.size() > 1) {	  long expireTime = Alarm.getCurrentTime() + _versionRolloverTime;	  _primaryController.setOldWebApp(_controllerList.get(1),					  expireTime);	  	}	_restartTime = Alarm.getCurrentTime();      }    }  }    /**   * Returns a printable view.   */  @Override  public String toString()  {    return getClass().getSimpleName() +  "[" + getId() + "]";  }  static class VersionNameComparator implements Comparator<String>  {    public int compare(String versionA, String versionB)    {      /*      String versionA = a.getVersion();      String versionB = b.getVersion();      */      int lengthA = versionA.length();      int lengthB = versionB.length();      int indexA = 0;      int indexB = 0;      while (indexA < lengthA && indexB < lengthB) {	int valueA = 0;	int valueB = 0;	char chA;	char chB;	for (;	     indexA < lengthA	       && '0' <= (chA = versionA.charAt(indexA)) && chA <= '9';	     indexA++) {	  valueA = 10 * valueA + chA - '0';	}	for (;	     indexB < lengthB	       && '0' <= (chB = versionB.charAt(indexB)) && chB <= '9';	     indexB++) {	  valueB = 10 * valueB + chB - '0';	}	if (valueA < valueB)	  return 1;	else if (valueB < valueA)	  return -1;	while (indexA < lengthA && indexB < lengthB	       && ! ('0' <= (chA = versionA.charAt(indexA)) && chA <= '9')	       && ! ('0' <= (chB = versionB.charAt(indexB)) && chB <= '9')) {	  if (chA < chB)	    return 1;	  else if (chB < chA)	    return -1;	  indexA++;	  indexB++;	}	if (indexA < lengthA	    && ! ('0' <= (chA = versionA.charAt(indexA)) && chA <= '9'))	  return 1;	else if (indexB < lengthB		 && ! ('0' <= (chB = versionB.charAt(indexB)) && chB <= '9'))	  return -1;      }      if (indexA != lengthA)	return 1;      else if (indexB != lengthB)	return -1;      else	return 0;    }  }}

⌨️ 快捷键说明

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