Package railo.runtime.type.scope.storage.clean

Source Code of railo.runtime.type.scope.storage.clean.CacheStorageScopeCleaner$Filter

package railo.runtime.type.scope.storage.clean;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import railo.commons.io.cache.Cache;
import railo.commons.io.cache.CacheEntry;
import railo.commons.io.cache.CacheKeyFilter;
import railo.runtime.cache.CacheConnection;
import railo.runtime.config.ConfigWebImpl;
import railo.runtime.type.scope.storage.StorageScopeCache;
import railo.runtime.type.scope.storage.StorageScopeEngine;
import railo.runtime.type.scope.storage.StorageScopeListener;

public class CacheStorageScopeCleaner extends StorageScopeCleanerSupport {
 
  private Filter filter;

  public CacheStorageScopeCleaner(int type,StorageScopeListener listener) {
    super(type,listener,INTERVALL_MINUTE);
    //this.strType=VariableInterpreter.scopeInt2String(type);
    filter=new Filter(strType);
  }
 
  public void init(StorageScopeEngine engine) {
    super.init(engine);
   
  }

  protected void _clean() {
    ConfigWebImpl config = (ConfigWebImpl) engine.getFactory().getConfig();
    Map<String, CacheConnection> connections = config.getCacheConnections();
    CacheConnection cc;
   
    if(connections!=null) {
      Map.Entry<String, CacheConnection> entry;
      Iterator<Entry<String, CacheConnection>> it = connections.entrySet().iterator();
      while(it.hasNext()){
        entry=it.next();
        cc=entry.getValue();
        if(cc.isStorage()){
          try {
            clean(cc,config);
          } catch (IOException e) {
            error(e);
          }
        }
      }
    }
   
  }

  private void clean(CacheConnection cc, ConfigWebImpl config) throws IOException {
    Cache cache = cc.getInstance(config);
    int len=filter.length(),index;
    List<CacheEntry> entries = cache.entries(filter);
    CacheEntry ce;
    long expires;
   
    String key,appname,cfid;
    if(entries.size()>0){
      Iterator<CacheEntry> it = entries.iterator();
      while(it.hasNext()){
        ce=it.next();
        expires=ce.lastModified().getTime()+ce.idleTimeSpan()-StorageScopeCache.SAVE_EXPIRES_OFFSET;
        if(expires<=System.currentTimeMillis()) {
          key=ce.getKey().substring(len);
          index=key.indexOf(':');
          cfid=key.substring(0,index);
          appname=key.substring(index+1);
         
          if(listener!=null)listener.doEnd(engine, this,appname, cfid);
          info("remove "+strType+"/"+appname+"/"+cfid+" from cache "+cc.getName());
          engine.remove(type,appname,cfid);
          cache.remove(ce.getKey());
        }
      }
    }
   
    //engine.remove(type,appName,cfid);
   
   
    //return (Struct) cache.getValue(key,null);
  }

  public static class Filter implements CacheKeyFilter {
    private String startsWith;

    public Filter(String type){
      startsWith="railo-storage:"+type+":";
    }
   
    public String toPattern() {
      // TODO Auto-generated method stub
      return startsWith+"*";
    }

    public boolean accept(String key) {
      return key.startsWith(startsWith);
    }

    public int length() {
      return startsWith.length();
    }
   
  }
}
TOP

Related Classes of railo.runtime.type.scope.storage.clean.CacheStorageScopeCleaner$Filter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.