001
014
015 package com.liferay.portal.kernel.cache;
016
017 import com.liferay.registry.Registry;
018 import com.liferay.registry.RegistryUtil;
019 import com.liferay.registry.ServiceReference;
020 import com.liferay.registry.ServiceTracker;
021 import com.liferay.registry.ServiceTrackerCustomizer;
022
023 import java.io.Serializable;
024
025 import java.util.Collection;
026 import java.util.Collections;
027 import java.util.Map;
028 import java.util.concurrent.ConcurrentHashMap;
029
030
033 public class PortalCacheProvider {
034
035 public static PortalCacheManager<? extends Serializable, ?>
036 getPortalCacheManager(String portalCacheManagerName) {
037
038 return _instance._getPortalCacheManager(portalCacheManagerName);
039 }
040
041 public static Collection<PortalCacheManager<? extends Serializable, ?>>
042 getPortalCacheManagers() {
043
044 return _instance._getPortalCacheManagers();
045 }
046
047 private PortalCacheProvider() {
048 _portalCacheManagers = new ConcurrentHashMap<>();
049
050 Registry registry = RegistryUtil.getRegistry();
051
052 _serviceTracker = registry.trackServices(
053 (Class<PortalCacheManager<? extends Serializable, ?>>)(Class<?>)
054 PortalCacheManager.class,
055 new PortalCacheProviderServiceTrackerCustomizer());
056
057 _serviceTracker.open();
058 }
059
060 private PortalCacheManager<? extends Serializable, ?>
061 _getPortalCacheManager(String portalCacheManagerName) {
062
063 return _portalCacheManagers.get(portalCacheManagerName);
064 }
065
066 private Collection<PortalCacheManager<? extends Serializable, ?>>
067 _getPortalCacheManagers() {
068
069 return Collections.unmodifiableCollection(
070 _portalCacheManagers.values());
071 }
072
073 private static final PortalCacheProvider _instance =
074 new PortalCacheProvider();
075
076 private final
077 Map<String, PortalCacheManager<? extends Serializable, ?>>
078 _portalCacheManagers;
079 private final
080 ServiceTracker<PortalCacheManager<? extends Serializable, ?>,
081 PortalCacheManager<? extends Serializable, ?>> _serviceTracker;
082
083 private class PortalCacheProviderServiceTrackerCustomizer
084 implements ServiceTrackerCustomizer
085 <PortalCacheManager<? extends Serializable, ?>,
086 PortalCacheManager<? extends Serializable, ?>> {
087
088 @Override
089 public PortalCacheManager<? extends Serializable, ?> addingService(
090 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
091 serviceReference) {
092
093 Registry registry = RegistryUtil.getRegistry();
094
095 PortalCacheManager<?, ?> portalCacheManager = registry.getService(
096 serviceReference);
097
098 _portalCacheManagers.put(
099 portalCacheManager.getName(), portalCacheManager);
100
101 return portalCacheManager;
102 }
103
104 @Override
105 public void modifiedService(
106 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
107 serviceReference,
108 PortalCacheManager<? extends Serializable, ?> portalCacheManager) {
109 }
110
111 @Override
112 public void removedService(
113 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
114 serviceReference,
115 PortalCacheManager<? extends Serializable, ?> portalCacheManager) {
116
117 _portalCacheManagers.remove(portalCacheManager.getName());
118 }
119
120 }
121
122 }