code: private VariableHandler.URLStruction _getVTPLTemplateStructionAlwaysCache(ESInfo dslinfo, String dsl)
  	{
  
  		String ikey = dsl;
  		String okey = dslinfo.getTemplateName();
  		EdenConcurrentCache<String,VariableHandler.URLStruction> sqlstructionMap =  this.parserVTPLTempateStructions.get(okey);
  		if(sqlstructionMap == null)
  		{
  			try
  			{
  				this.vtplLock.lock();
  				sqlstructionMap =  this.parserVTPLTempateStructions.get(okey);
  				if(sqlstructionMap == null)
  				{
  					sqlstructionMap = new EdenConcurrentCache<String,VariableHandler.URLStruction>(perKeyDSLStructionCacheSize);
  					parserVTPLTempateStructions.put(okey,sqlstructionMap);
  				}
  			}
  			finally {
  				vtplLock.unlock();
  			}
  		}
  
  		VariableHandler.URLStruction urlStruction = sqlstructionMap.get(ikey);
  		boolean outOfSize = false;
  		if(urlStruction == null){
  			try
  			{
  				this.vtplLock.lock();
  				urlStruction = sqlstructionMap.get(ikey);
  				if(urlStruction == null){
  					urlStruction = VariableHandler.parserStruction(dsl,tempateStructionBuiler);
  
  					outOfSize =	sqlstructionMap.put(ikey,urlStruction);
  
  
  				}
  			}
  			finally {
  				this.vtplLock.unlock();
  			}
  			if(outOfSize && logger.isWarnEnabled()){
  				logDslStructionWarn(dslinfo,dsl ,okey,sqlstructionMap.getMaxSize());
  			}
  		}
  
  		return urlStruction;
  	}
docs: vtpl需要进行分级缓存
  @param dslinfo
  @param dsl
  @return