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 PortalCacheManagerProvider {
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 PortalCacheManagerProvider() {
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 PortalCacheManagerProvider _instance =
074 new PortalCacheManagerProvider();
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.getPortalCacheManagerName(),
100 portalCacheManager);
101
102 return portalCacheManager;
103 }
104
105 @Override
106 public void modifiedService(
107 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
108 serviceReference,
109 PortalCacheManager<? extends Serializable, ?> portalCacheManager) {
110 }
111
112 @Override
113 public void removedService(
114 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
115 serviceReference,
116 PortalCacheManager<? extends Serializable, ?> portalCacheManager) {
117
118 _portalCacheManagers.remove(
119 portalCacheManager.getPortalCacheManagerName());
120 }
121
122 }
123
124 }