Package org.solbase.cache

Source Code of org.solbase.cache.SolbaseLRUCache

package org.solbase.cache;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.HashMap;
import java.util.ResourceBundle;

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;

import org.apache.solr.common.util.NamedList;
import org.apache.solr.search.LRUCache;
import org.apache.solr.search.SolrCache.State;

public class SolbaseLRUCache<K, V, Z> extends VersionedCache<K, V, Z> implements SolbaseLRUCacheMBean{

  LRUCache cache;
  private int size;
 
  public SolbaseLRUCache(int cacheSize, String name) {
    String size = System.getProperty("solbase.lrucache.size");

    try {
      if (size == null && ResourceBundle.getBundle("solbase") != null) {
        size = ResourceBundle.getBundle("solbase").getString("lrucache.size");
      }
    } catch (Exception ex) {

    }
   
    if (size == null) {
      size = new Integer(1024 * cacheSize).toString();
    }
   
    this.size = new Integer(size);

    HashMap<String, String> argMap = new HashMap<String, String>();
    argMap.put("size", size);
    argMap.put("name", "solbaseCache");
   
    cache = new LRUCache();
    cache.init(argMap, null, null);
    cache.setState(State.LIVE);
    // register mbean here
    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
      ObjectName objName;
    try {
      objName = new ObjectName("org.solbase.cache:type=SolbaseLRUCache-"+name);
      mbs.registerMBean(this, objName);
    } catch (InstanceAlreadyExistsException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (MBeanRegistrationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (NotCompliantMBeanException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();

    } catch (MalformedObjectNameException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    } catch (NullPointerException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
  }

  @SuppressWarnings("unchecked")
  @Override
  protected CachedObjectWrapper<V, Z> getInternal(K key) throws IOException {
    return (CachedObjectWrapper<V, Z>) cache.get(key);
  }

  @Override
  public void put(K key, CachedObjectWrapper<V, Z> aValue) throws IOException {
    cache.put(key, aValue);
  }

  @Override
  public void clear() throws IOException {
    cache.clear();
  }
  @Override
  public boolean isCacheFull() {
    return this.size <= cache.size();
  }

  @Override
  public NamedList getStatistics() {
    return this.cache.getStatistics();
  }

  @Override
  public long getLookups() {
    return this.cache.getLookups();
  }

  @Override
  public long getHits() {
    return this.cache.getHits();
  }

  @Override
  public long getInserts() {
    return this.cache.getInserts();
  }

  @Override
  public long getEvictions() {
    return this.cache.getEvictions();
  }

  @Override
  public void freezeCacheSize() {
    this.cache.freezeCacheSize();
  }

  @Override
  public void resetCacheLimit(int limit) {
    this.cache.resetCacheLimit(limit);
  }

}
TOP

Related Classes of org.solbase.cache.SolbaseLRUCache

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.