package org.gcube.gcat.persistence.ckan; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import javax.cache.Cache; import javax.cache.CacheManager; import javax.cache.Caching; import javax.cache.configuration.MutableConfiguration; import javax.cache.expiry.CreatedExpiryPolicy; import javax.cache.expiry.Duration; import javax.cache.spi.CachingProvider; public abstract class CKANUserCache { private static final CacheManager cacheManager; private static final String USERS_CACHE = "userCache"; private static final MutableConfiguration userCacheConfiguration; private static final Map> userCachePerCkanInstance; static { CachingProvider provider = Caching.getCachingProvider(); cacheManager = provider.getCacheManager(); userCacheConfiguration = new MutableConfiguration().setTypes(String.class, CKANUser.class) .setStoreByValue(false) .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.HOURS, 3))); userCachePerCkanInstance = new HashMap>(); } private CKANUserCache() { } public static CKANUser getCurrrentCKANUser() { String ckanURL = CKANInstance.getInstance().getCKANURL(); Cache userCache = userCachePerCkanInstance.get(ckanURL); if(userCache==null) { userCache = cacheManager.createCache(USERS_CACHE, userCacheConfiguration); userCachePerCkanInstance.put(ckanURL, userCache); } String ckanUserName = CKANUser.getCKANUsername(); CKANUser ckanUser = userCache.get(ckanUserName); if(ckanUser==null) { ckanUser = new CKANUser(); ckanUser.retrieve(); } return ckanUser; } @Override protected void finalize() throws Throwable { super.finalize(); cacheManager.close(); } }