001
014
015 package com.liferay.portal.kernel.cache;
016
017 import com.liferay.portal.kernel.util.InitialThreadLocal;
018
019 import java.io.Serializable;
020
021 import java.util.EnumMap;
022 import java.util.HashMap;
023 import java.util.Map;
024
025
028 public class ThreadLocalCacheManager {
029
030 public static void clearAll(Lifecycle lifecycle) {
031 Map<Lifecycle, Map<Serializable, ThreadLocalCache<?>>>
032 threadLocalCacheMaps = _threadLocalCacheMaps.get();
033
034 Map<Serializable, ThreadLocalCache<?>> threadLocalCacheMap =
035 threadLocalCacheMaps.get(lifecycle);
036
037 if (threadLocalCacheMap != null) {
038 threadLocalCacheMap.clear();
039 }
040 }
041
042 public static void destroy() {
043 _threadLocalCacheMaps.remove();
044 }
045
046 public static <T> ThreadLocalCache<T> getThreadLocalCache(
047 Lifecycle lifecycle, Serializable name) {
048
049 Map<Lifecycle, Map<Serializable, ThreadLocalCache<?>>>
050 threadLocalCacheMaps = _threadLocalCacheMaps.get();
051
052 Map<Serializable, ThreadLocalCache<?>> threadLocalCacheMap =
053 threadLocalCacheMaps.get(lifecycle);
054
055 if (threadLocalCacheMap == null) {
056 threadLocalCacheMap =
057 new HashMap<Serializable, ThreadLocalCache<?>>();
058
059 threadLocalCacheMaps.put(lifecycle, threadLocalCacheMap);
060 }
061
062 ThreadLocalCache<?> threadLocalCache = threadLocalCacheMap.get(name);
063
064 if (threadLocalCache == null) {
065 threadLocalCache = new ThreadLocalCache<T>(name, lifecycle);
066
067 threadLocalCacheMap.put(name, threadLocalCache);
068 }
069
070 return (ThreadLocalCache<T>)threadLocalCache;
071 }
072
073 private static ThreadLocal
074 <Map<Lifecycle, Map<Serializable, ThreadLocalCache<?>>>>
075 _threadLocalCacheMaps = new InitialThreadLocal
076 <Map<Lifecycle, Map<Serializable, ThreadLocalCache<?>>>>(
077 ThreadLocalCacheManager.class + "._threadLocalCacheMaps",
078 new EnumMap
079 <Lifecycle, Map<Serializable, ThreadLocalCache<?>>>(
080 Lifecycle.class));
081
082 }