1 23 24 package com.rift.coad.lib.bean; 26 27 import java.util.Map ; 29 import java.util.HashMap ; 30 import java.util.Iterator ; 31 32 import com.rift.coad.lib.cache.Cache; 34 import com.rift.coad.lib.cache.CacheEntry; 35 import com.rift.coad.lib.thread.ThreadStateMonitor; 36 37 42 public class TransactionBeanCacheManager implements Cache { 43 44 private Map transactionBeanCaches = new HashMap (); 46 private ThreadStateMonitor status = new ThreadStateMonitor(); 47 48 51 public TransactionBeanCacheManager() { 52 53 } 54 55 56 63 public TransactionBeanCache getBeanCache(Object ref) throws BeanException { 64 checkStatus(); 65 synchronized (transactionBeanCaches) { 66 if (!transactionBeanCaches.containsKey(ref)) { 67 transactionBeanCaches.put(ref,new TransactionBeanCache()); 68 } 69 return (TransactionBeanCache)transactionBeanCaches.get(ref); 70 } 71 } 72 73 74 77 public void garbageCollect() { 78 Map transactionBeanCaches = new HashMap (); 79 synchronized (this.transactionBeanCaches) { 80 transactionBeanCaches.putAll(this.transactionBeanCaches); 81 } 82 for (Iterator iter = transactionBeanCaches.keySet().iterator(); 83 iter.hasNext();) { 84 TransactionBeanCache transactionBeanCache = 85 (TransactionBeanCache)transactionBeanCaches.get( 86 iter.next()); 87 transactionBeanCache.garbageCollect(); 88 } 89 } 90 91 92 95 public void clear() { 96 status.terminate(true); 97 Map transactionBeanCaches = new HashMap (); 98 synchronized (this.transactionBeanCaches) { 99 transactionBeanCaches.putAll(this.transactionBeanCaches); 100 this.transactionBeanCaches.clear(); 101 } 102 for (Iterator iter = transactionBeanCaches.keySet().iterator(); 103 iter.hasNext();) { 104 TransactionBeanCache transactionBeanCache = 105 (TransactionBeanCache)transactionBeanCaches.get( 106 iter.next()); 107 transactionBeanCache.clear(); 108 } 109 } 110 111 112 118 public boolean contains(Object cacheEntry) { 119 synchronized (transactionBeanCaches) { 120 return transactionBeanCaches.containsKey(cacheEntry); 121 } 122 } 123 124 125 130 private void checkStatus() throws BeanException { 131 if (status.isTerminated()) { 132 throw new BeanException("Bean cache manager has been terminated."); 133 } 134 } 135 } 136 | Popular Tags |