分类:
2008-10-16 19:10:22
Opensymphony()是一个很好提供开源项目的组织。同Jakarta相比,这里的组件(Component)更多的是精致小巧的设计,它们尤以简单易用和可插拔的灵活性见长。
代码
/** Cache.java */
public interface Cache {
Object get(Object key) throws CacheException;
void put(Object key, Object value) throws CacheException;
void remove(Object key) throws CacheException;
void clear() throws CacheException;
void destroy() throws CacheException;}
/** OSCache.java */
public class OSCache implements Cache {
private GeneralCacheAdministrator cache = null;
public OSCache(Properties prop) {
cache = new GeneralCacheAdministrator(prop);
}
public void setCacheCapacity(int cacheCapacity) {
cache.setCacheCapacity(cacheCapacity);
}
public Object get(Object key) throws CacheException {
try {
return cache.getFromCache(String.valueOf(key));
} catch (NeedsRefreshException e) {
cache.cancelUpdate(String.valueOf(key));
return null;
}
}
public void put(Object key, Object value) throws CacheException {
cache.putInCache(String.valueOf(key), value);
}
public void remove(Object key) throws CacheException {
cache.flushEntry(String.valueOf(key));
}
public void clear() throws CacheException {
cache.flushAll();
}
public void destroy() throws CacheException {
cache.destroy();
}
}
/** CacheManager.java */
public class CacheManager { //$SUP-USP$
private static Map cacheMap = new HashMap();
private static Config config = ConfigManager.getConfig();
private CacheManager() {
}
public static Cache getCache(Class clazz) {
return getCache(clazz.getName());
}
public static Cache getCache(String cacheId) {
Cache cache = null;
cache = (Cache) cacheMap.get(cacheId);
if (cache == null) {
cache = new OSCache(config.getProperties());
cacheMap.put(cacheId, cache);
}
return cache;
}
}
OSCache:J2EE Caching机制。它主要用于JSP Caching、Request Caching、General-Purpose Cache三个方面。在JSP Caching、Request Caching方面,OSCache能够解决动态网站的基本问题:缓存动态内容、缓存二进制内容、错误包容。在General-Purpose Cache方面,在应用中通过调用OSCache的API来缓存任意的Java对象,hibernate 2.0开始对其也有支持。
OSCache标记库是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。虽然已经有一些供应商在提供各种形式的缓存产品,但是,它们都属于面向特定供应商的产品。OSCache能够在任何JSP 1.2兼容的上运行,它不仅能够为所有用户缓冲现有JSP代码块,而且能够以用户为单位进行缓冲。OSCache还包含一些提高可伸缩性的高级特性,比如:缓冲到磁盘,可编程的缓冲刷新,异常控制,等等。
--------------------------------------------------------------------------------
以上文字摘自moxie(安子)的《WebWork教程-0.90版》
网上对OSCache的介绍大多是关于JSP Caching、Request Caching方面的,对任意java对象的缓冲大多数人选择了JCS。由于种种原因,hibernate 2.0 放弃了对 JCS 的支持,所以才引起了我对 OSCache 的关注,下面是我参考 Hibernate 的源码对 OSCache 做的简单封装