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
081 <PortalCacheManager<? extends Serializable, ?>,
082 PortalCacheManager<? extends Serializable, ?>> _serviceTracker;
083
084 private class PortalCacheProviderServiceTrackerCustomizer
085 implements ServiceTrackerCustomizer
086 <PortalCacheManager<? extends Serializable, ?>,
087 PortalCacheManager<? extends Serializable, ?>> {
088
089 @Override
090 public PortalCacheManager<? extends Serializable, ?> addingService(
091 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
092 serviceReference) {
093
094 Registry registry = RegistryUtil.getRegistry();
095
096 PortalCacheManager<?, ?> portalCacheManager = registry.getService(
097 serviceReference);
098
099 _portalCacheManagers.put(
100 portalCacheManager.getPortalCacheManagerName(),
101 portalCacheManager);
102
103 return portalCacheManager;
104 }
105
106 @Override
107 public void modifiedService(
108 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
109 serviceReference,
110 PortalCacheManager<? extends Serializable, ?> portalCacheManager) {
111 }
112
113 @Override
114 public void removedService(
115 ServiceReference<PortalCacheManager<? extends Serializable, ?>>
116 serviceReference,
117 PortalCacheManager<? extends Serializable, ?> portalCacheManager) {
118
119 _portalCacheManagers.remove(
120 portalCacheManager.getPortalCacheManagerName());
121 }
122
123 }
124
125 }