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;
	}
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 ; }
vtpl需要进行分级缓存
@param dslinfo
@param dsl
@return