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