01: package org.shiftone.cache.util;
02:
03: import org.shiftone.cache.Cache;
04: import org.shiftone.cache.CacheException;
05: import org.shiftone.cache.CacheFactory;
06: import org.shiftone.cache.policy.zero.ZeroCacheFactory;
07:
08: /**
09: * @version $Revision: 1.1 $
10: * @author <a href="mailto:jeff@shiftone.org">Jeff Drost</a>
11: */
12: public abstract class AbstractDecoratorCacheFactory implements
13: CacheFactory {
14:
15: private static final Log LOG = new Log(
16: AbstractDecoratorCacheFactory.class);
17: private CacheFactory delegate;
18:
19: public Cache newInstance(String cacheName, long timeoutMs,
20: int maxSize) {
21:
22: CacheFactory factory = getDelegate();
23: Cache cache = null;
24:
25: try {
26: cache = factory.newInstance(cacheName, timeoutMs, maxSize);
27:
28: if (factory != null) {
29: cache = wrapDelegate(cacheName, cache);
30: }
31: } catch (Exception e) {
32: LOG.error(
33: "unable to create cache decorator : " + cacheName,
34: e);
35: }
36:
37: if (cache == null) {
38: LOG.info("returning null cache for : " + cacheName);
39:
40: cache = ZeroCacheFactory.NULL_CACHE;
41: }
42:
43: return cache;
44: }
45:
46: protected abstract Cache wrapDelegate(String cacheName,
47: Cache delegateCache) throws CacheException;
48:
49: public CacheFactory getDelegate() {
50: return delegate;
51: }
52:
53: public void setDelegate(CacheFactory delegate) {
54: this .delegate = delegate;
55: }
56:
57: public String toString() {
58: return getClass().getName() + "[" + delegate + "]";
59: }
60: }
|