Package railo.runtime.cache.eh.remote

Source Code of railo.runtime.cache.eh.remote.EHCacheRemote

package railo.runtime.cache.eh.remote;

import java.io.IOException;
import java.net.URL;
import java.util.List;

import javax.xml.rpc.ServiceException;

import railo.commons.io.cache.CacheEntry;
import railo.loader.engine.CFMLEngineFactory;
import railo.runtime.cache.CacheSupport;
import railo.runtime.cache.eh.remote.rest.RESTClient;
import railo.runtime.cache.eh.remote.rest.sax.CacheConfiguration;
import railo.runtime.cache.eh.remote.soap.Element;
import railo.runtime.cache.eh.remote.soap.SoapClient;
import railo.runtime.config.Config;
import railo.runtime.config.ConfigWeb;
import railo.runtime.exp.PageException;
import railo.runtime.type.Struct;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.util.Cast;

public class EHCacheRemote extends CacheSupport {

  private URL url;
  private String name;
  private RESTClient rest;
  private SoapClient soap;


  public EHCacheRemote() { 
  }
 
  public static void init(ConfigWeb config,String[] cacheNames,Struct[] arguments) {
   
  }

  public void init(Config config,String name, Struct arguments) throws IOException {
    Cast caster = CFMLEngineFactory.getInstance().getCastUtil();
    String strUrl=null;
   
    try {
      strUrl=caster.toString(arguments.get("url"));
      this.name=caster.toString(arguments.get("remoteCacheName"));
     
    } catch (PageException e) {
      throw new IOException(e.getMessage());
    }
    if(!strUrl.endsWith("/")){
      strUrl=strUrl+"/";
    }
    this.url=new URL(strUrl);
   
   
   
   
    this.rest=new RESTClient(new URL(url.toExternalForm()+"rest/"));
    this.soap=new SoapClient(new URL(url.toExternalForm()+"soap/EhcacheWebServiceEndpoint?wsdl"));
  }

  @Override
  public boolean contains(String key) {
    try {
      return rest.contains(name, key);
    } catch (IOException e) {
      return false;
    }
  }
 
  @Override
  public List keys() {
    try {
      return soap.getKeysWithExpiryCheck(name);
    }
    catch (Throwable t) {
      throw new RuntimeException(t);
    }
  }

  public CacheEntry getQuiet(String key) throws IOException {
    try {
      return soap.getQuiet(name, key);
    }
    catch (ServiceException e) {
      throw new IOException(e.getMessage());
    }
  }
 

  public CacheEntry getQuiet(String key,CacheEntry defaultValue) {
    try {
      return soap.getQuiet(name, key);
    }
    catch (Throwable t) {
      return defaultValue;
    }
  }

  public CacheEntry getCacheEntry(String key) throws IOException {
    try {
      return soap.get(name, key);
    }
    catch (ServiceException e) {
      throw new IOException(e.getMessage());
    }
  }

  public CacheEntry getCacheEntry(String key,CacheEntry defaultValue) {
    try {
      return soap.get(name, key);
    }
    catch (Throwable t) {
      return defaultValue;
    }
  }

 

  public Struct getCustomInfo() {
    Struct info=super.getCustomInfo();
    try  {
      CacheConfiguration conf = rest.getMeta(name).getCacheConfiguration();
     
      info.setEL("disk_expiry_thread_interval", new Double(conf.getDiskExpiryThreadIntervalSeconds()));
      info.setEL("disk_spool_buffer_size", new Double(conf.getDiskSpoolBufferSize()));
      info.setEL("max_elements_in_memory", new Double(conf.getMaxElementsInMemory()));
      info.setEL("max_elements_on_disk", new Double(conf.getMaxElementsOnDisk()));
      info.setEL("time_to_idle", new Double(conf.getTimeToIdleSeconds()));
      info.setEL("time_to_live", new Double(conf.getTimeToLiveSeconds()));
      info.setEL(KeyConstants._name, conf.getName());
    }
    catch(Throwable t){
      //print.printST(t);
    }
   
    return info;
  }


  public long hitCount() {
    // TODO Auto-generated method stub
    return 0;
  }


  public long missCount() {
    // TODO Auto-generated method stub
    return 0;
  }

  public void put(String key, Object value, Long idleTime, Long liveTime) {
    Boolean eternal = idleTime==null && liveTime==null?Boolean.TRUE:Boolean.FALSE;
    Integer idle = idleTime==null?null:new Integer((int)idleTime.longValue()/1000);
    Integer live = liveTime==null?null:new Integer((int)liveTime.longValue()/1000);
    try {
      Element el = new Element();
      el.setKey(key);
      // TODO make text/plain for string
      el.setMimeType("application/x-java-serialized-object");
      el.setValue(Converter.toBytes(value));
      el.setEternal(eternal);
      el.setTimeToIdleSeconds(idle);
      el.setTimeToLiveSeconds(live);
   
      soap.put(name,el);
    } catch (Throwable t) {
      throw new RuntimeException(t);
    }
   
  }

  @Override
  public boolean remove(String key) {
    try {
      return soap.remove(name, key);
    }
    catch (Exception e) {
      return false;
    }
  }


}
TOP

Related Classes of railo.runtime.cache.eh.remote.EHCacheRemote

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.