Package com.jeecms.common.web

Source Code of com.jeecms.common.web.WebEhCacheManagerFacotryBean

package com.jeecms.common.web;

import java.io.IOException;

import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.ObjectExistsException;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.ConfigurationFactory;
import net.sf.ehcache.config.DiskStoreConfiguration;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;

/**
* 用于Web的EhCacheManagerFacotryBean。可以基于Web根目录指定diskStore地址。
*
* @author liufang
*
*/
public class WebEhCacheManagerFacotryBean implements FactoryBean<CacheManager>,
    InitializingBean, DisposableBean {

  private final Logger log = LoggerFactory
      .getLogger(WebEhCacheManagerFacotryBean.class);

  private Resource configLocation;
  private Resource diskStoreLocation;

  private String cacheManagerName;

  private CacheManager cacheManager;

  /**
   * Set the location of the EHCache config file. A typical value is
   * "/WEB-INF/ehcache.xml".
   * <p>
   * Default is "ehcache.xml" in the root of the class path, or if not found,
   * "ehcache-failsafe.xml" in the EHCache jar (default EHCache
   * initialization).
   *
   * @see net.sf.ehcache.CacheManager#create(java.io.InputStream)
   * @see net.sf.ehcache.CacheManager#CacheManager(java.io.InputStream)
   */
  public void setConfigLocation(Resource configLocation) {
    this.configLocation = configLocation;
  }

  /**
   * 设置ehcahce的diskStore path,例如:/WEB-INF/cache
   *
   * 如设置了此项,则在ehcache配置文件中不要配置<diskStore path=""/>,否则本设置无效。
   *
   * @param diskStoreLocation
   */
  public void setdiskStoreLocation(Resource diskStoreLocation) {
    this.diskStoreLocation = diskStoreLocation;
  }

  /**
   * Set the name of the EHCache CacheManager (if a specific name is desired).
   *
   * @see net.sf.ehcache.CacheManager#setName(String)
   */
  public void setCacheManagerName(String cacheManagerName) {
    this.cacheManagerName = cacheManagerName;
  }

  public void afterPropertiesSet() throws IOException, CacheException {
    log.info("Initializing EHCache CacheManager");
    Configuration config = null;
    if (this.configLocation != null) {
      config = ConfigurationFactory
          .parseConfiguration(this.configLocation.getInputStream());
      if (this.diskStoreLocation != null) {
        DiskStoreConfiguration dc = new DiskStoreConfiguration();
        dc.setPath(this.diskStoreLocation.getFile().getAbsolutePath());
        try {
          config.addDiskStore(dc);
        } catch (ObjectExistsException e) {
          log.warn("if you want to config distStore in spring,"
              + " please remove diskStore in config file!", e);
        }
      }
    }
    if (config != null) {
      this.cacheManager = new CacheManager(config);
    } else {
      this.cacheManager = new CacheManager();
    }
    if (this.cacheManagerName != null) {
      this.cacheManager.setName(this.cacheManagerName);
    }
  }

  public CacheManager getObject() {
    return this.cacheManager;
  }

  public Class<? extends CacheManager> getObjectType() {
    return (this.cacheManager != null ? this.cacheManager.getClass()
        : CacheManager.class);
  }

  public boolean isSingleton() {
    return true;
  }

  public void destroy() {
    log.info("Shutting down EHCache CacheManager");
    this.cacheManager.shutdown();
  }
}
TOP

Related Classes of com.jeecms.common.web.WebEhCacheManagerFacotryBean

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.