キャッシュ初解(二)
3550 ワード
EHCAcheソース分析:
まずキャッシュクラスCacheManagerを見て
このクラスを呼び出すにはCacheManager manager=new VacheManager()が必要です.
新規作成:manager.create();
このメソッドはデフォルト構成で、ファクトリメソッドで単一のオブジェクトキャッシュマネージャを作成します.
getInstance()でインスタンスを取得することもできます
キャッシュ名に基づいてキャッシュオブジェクトを取得するには
キャッシュは、Mapコレクションでデータを格納するものであってもよいし、
EHcacheを取得します
キャッシュはどのように格納されているのか、以下のコードを見ればわかります.
addCache()メソッドにより、cacheNameが既に存在するかどうかを判断し、存在しない場合は、デフォルトキャッシュでclone()をcacheにクローンします.つまりmapにクローンします.存在するなら処理しない
以上は私のEHCacheに対する少しの理解で、後でまた引き続き補充します
まずキャッシュクラスCacheManagerを見て
public class CacheManager {
// CLASSPATH ehcache.xml ,
/**
* Keeps track of all known CacheManagers. Used to check on conflicts.
* CacheManagers should remove themselves from this list during shut down.
*/
public static final List ALL_CACHE_MANAGERS = Collections.synchronizedList(new ArrayList());
private static final Log LOG = LogFactory.getLog(CacheManager.class.getName());
/**
* The Singleton Instance.
*/
private static CacheManager singleton;
/**
* Caches managed by this manager.
*/
protected final Map caches = new HashMap();
/**
* Default cache cache.
*/
private Ehcache defaultCache;
このクラスを呼び出すにはCacheManager manager=new VacheManager()が必要です.
新規作成:manager.create();
public static CacheManager create() throws CacheException {
synchronized (CacheManager.class) {
if (singleton == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Creating new CacheManager with default config");
}
singleton = new CacheManager();
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("Attempting to create an existing singleton. Existing singleton returned.");
}
}
return singleton;
}
}
このメソッドはデフォルト構成で、ファクトリメソッドで単一のオブジェクトキャッシュマネージャを作成します.
getInstance()でインスタンスを取得することもできます
public static CacheManager getInstance() throws CacheException {
return CacheManager.create();
}
キャッシュ名に基づいてキャッシュオブジェクトを取得するには
public synchronized Cache getCache(String name) throws IllegalStateException, ClassCastException {
checkStatus();
return (Cache) caches.get(name);
}
キャッシュは、Mapコレクションでデータを格納するものであってもよいし、
public synchronized Ehcache getEhcache(String name) throws IllegalStateException {
checkStatus();
return (Ehcache) caches.get(name);
}
EHcacheを取得します
キャッシュはどのように格納されているのか、以下のコードを見ればわかります.
public synchronized void addCache(String cacheName) throws IllegalStateException,
ObjectExistsException, CacheException {
checkStatus();
//NPE guard
if (cacheName == null || cacheName.length() == 0) {
return;
}
if (caches.get(cacheName) != null) {
throw new ObjectExistsException("Cache " + cacheName + " already exists");
}
Ehcache cache = null;
try {
cache = (Ehcache) defaultCache.clone();
} catch (CloneNotSupportedException e) {
LOG.error("Failure adding cache. Initial cause was " + e.getMessage(), e);
}
if (cache != null) {
cache.setName(cacheName);
}
addCache(cache);
}
addCache()メソッドにより、cacheNameが既に存在するかどうかを判断し、存在しない場合は、デフォルトキャッシュでclone()をcacheにクローンします.つまりmapにクローンします.存在するなら処理しない
以上は私のEHCacheに対する少しの理解で、後でまた引き続き補充します