文档章节

轻量级java web实践-7(框架源码-5)

游客
 游客
发布于 2014/03/29 13:03
字数 552
阅读 108
收藏 0

缓存部分源码

抽象接口

public interface Cache
{
    public Object get(Object key) throws CacheException;
    public void put(Object key, Object value) throws CacheException;
    public void update(Object key, Object value) throws CacheException;
    public List<Object> keys() throws CacheException ;
    public void remove(Object key) throws CacheException;
    public void clear() throws CacheException;
    public void destroy() throws CacheException;
}
public interface CacheProvider
{
    public Cache buildCache(String regionName, boolean autoCreate) throws CacheException;

    public void start() throws CacheException;

    public void stop();
}

Ehcache支持

public class EhCache implements Cache
{
    private net.sf.ehcache.Cache cache;

    public EhCache(net.sf.ehcache.Cache cache)
    {
        this.cache = cache;
    }

    @Override
    public Object get(Object key) throws CacheException
    {
        try
        {
            if (key == null)
                return null;
            else
            {
                Element element = cache.get(key);
                if (element != null)
                    return element.getObjectValue();
            }
            return null;
        }
        catch (net.sf.ehcache.CacheException e)
        {
            throw new CacheException(e);
        }
    }

    @Override
    public void put(Object key, Object value) throws CacheException
    {
        try
        {
            Element element = new Element(key, value);
            cache.put(element);
        }
        catch (IllegalArgumentException e)
        {
            throw new CacheException(e);
        }
        catch (IllegalStateException e)
        {
            throw new CacheException(e);
        }
        catch (net.sf.ehcache.CacheException e)
        {
            throw new CacheException(e);
        }
    }

    @Override
    public void update(Object key, Object value) throws CacheException
    {
        put(key, value);
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<Object> keys() throws CacheException
    {
        return this.cache.getKeys();
    }

    @Override
    public void remove(Object key) throws CacheException
    {
        try
        {
            cache.remove(key);
        }
        catch (IllegalStateException e)
        {
            throw new CacheException(e);
        }
        catch (net.sf.ehcache.CacheException e)
        {
            throw new CacheException(e);
        }
    }

    @Override
    public void clear() throws CacheException
    {
        try
        {
            cache.removeAll();
        }
        catch (IllegalStateException e)
        {
            throw new CacheException(e);
        }
        catch (net.sf.ehcache.CacheException e)
        {
            throw new CacheException(e);
        }
    }

    @Override
    public void destroy() throws CacheException
    {
        try
        {
            cache.getCacheManager().removeCache(cache.getName());
        }
        catch (IllegalStateException e)
        {
            throw new CacheException(e);
        }
        catch (net.sf.ehcache.CacheException e)
        {
            throw new CacheException(e);
        }
    }

}
public class CacheManager
{
    private final static Logger log = LoggerFactory.getLogger(CacheManager.class);
    private static CacheProvider provider;

    static
    {
        initCacheProvider("org.express.portal.cache.EhCacheProvider");
    }

    private static void initCacheProvider(String prv_name)
    {
        try
        {
            CacheManager.provider = (CacheProvider) Class.forName(prv_name).newInstance();
            CacheManager.provider.start();
            log.info("Using CacheProvider : " + provider.getClass().getName());
        }
        catch (Exception e)
        {
            log.error("Unabled to initialize cache provider:" + prv_name + ", using ehcache default.", e);
            CacheManager.provider = new EhCacheProvider();
        }
    }

    private final static Cache _getCache(String cache_name, boolean autoCreate)
    {
        if (provider == null)
        {
            provider = new EhCacheProvider();
        }
        return provider.buildCache(cache_name, autoCreate);
    }

    /**
     * 获取缓存中的数据
     * 
     * @param name
     * @param key
     * @return
     */
    public final static Object get(String name, Serializable key)
    {
        if (name != null && key != null)
            return _getCache(name, true).get(key);
        return null;
    }

    /**
     * 获取缓存中的数据
     * 
     * @param <T>
     * @param resultClass
     * @param name
     * @param key
     * @return
     */
    @SuppressWarnings("unchecked")
    public final static <T> T get(Class<T> resultClass, String name, Serializable key)
    {
        if (name != null && key != null)
            return (T) _getCache(name, true).get(key);
        return null;
    }

    /**
     * 写入缓存
     * 
     * @param name
     * @param key
     * @param value
     */
    public final static void set(String name, Serializable key, Serializable value)
    {
        if (name != null && key != null && value != null)
            _getCache(name, true).put(key, value);
    }

    /**
     * 清除缓冲中的某个数据
     * 
     * @param name
     * @param key
     */
    public final static void evict(String name, Serializable key)
    {
        if (name != null && key != null)
            _getCache(name, true).remove(key);
    }

    /**
     * 清除缓冲中的某个数据
     * 
     * @param name
     * @param key
     */
    public final static void justEvict(String name, Serializable key)
    {
        if (name != null && key != null)
        {
            Cache cache = _getCache(name, false);
            if (cache != null)
                cache.remove(key);
        }
    }
}


© 著作权归作者所有

共有 人打赏支持
游客
粉丝 137
博文 28
码字总数 10307
作品 0
深圳
CTO(技术副总裁)
私信 提问
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
Minidao_1.6.1版本发布,超轻量Java持久化框架

Minidao_1.6.1版本发布了,超轻量Java持久化框架 升级日志 1,修复minidao参数不支持下划线问题 2,修复minidao接口定义返回类型为基本数据类型,无法传参数问题 3,拓展灵活性,通过sql判断...

Jeecg
2016/09/12
1K
5
Minidao_1.6.2 发布,超轻量 Java 持久化框架

Minidao_1.6.2 版本发布了,超轻量Java持久化框架 升级日志 1,扩展新标签@param 2,支持拦截器 Interceptor 3,提高分页效率,SqlServer兼容问题处理 4,升级spring4 Minidao 简介 MiniDao ...

Jeecg
2017/08/18
777
2
Minidao 1.6.2 发布,轻量 Java 持久化框架

Minidao 1.6.2 版本发布,超轻量Java持久化框架(Hibernate完美助手) 升级日志 支持自增主键策略模式 支持自定义扩展主键策略 新增示例:自增主键策略模式 新增示例:存储过程调用 新增示例...

Jeecg
2018/03/09
894
2
10年工作整理材料分享(JavaEE,linux),结交朋友,共同学习进步

本人从事互联网开发由10年多的时间了,先后经历过各大一线的IT互联网公司,伴随着年纪的增加,自己也在总结这么多年的实际的开发经验,我目前整理出了基于J2EE,J2SE,PHP,Linux,数据库的web...

yar_fengling
2015/03/31
159
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
6
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部