diff --git a/pom.xml b/pom.xml index 08e11ab..ed00129 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,7 @@ org.gcube.common authorization-utils + [2.0.0, 3.0.0-SNAPSHOT) org.gcube.common diff --git a/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java b/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java index 866928c..bef9571 100644 --- a/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java +++ b/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java @@ -56,7 +56,7 @@ public class CatalogueConfigurationFactory { // The supported organizations could be changed we need to empty the user cache for the context // to avoid to miss to add an user in an organization which has been added. - CKANUserCache.emptyUsersCache(); + CKANUserCache.emptyUserCache(); return catalogueConfiguration; } diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java index 98d8ac7..86924cf 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java @@ -1,5 +1,7 @@ package org.gcube.gcat.persistence.ckan; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; import javax.cache.Cache; @@ -22,6 +24,8 @@ public abstract class CKANUserCache { private static final MutableConfiguration userCacheConfiguration; + private static final Map> userCachePerContext; + static { CachingProvider provider = Caching.getCachingProvider(); cacheManager = provider.getCacheManager(); @@ -29,6 +33,8 @@ public abstract class CKANUserCache { userCacheConfiguration = new MutableConfiguration().setTypes(String.class, CKANUser.class) .setStoreByValue(false) .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 15))); + + userCachePerContext = new HashMap>(); } private CKANUserCache() { @@ -37,9 +43,10 @@ public abstract class CKANUserCache { public synchronized static CKANUser getCurrrentCKANUser() { SecretManager secretManager = SecretManagerProvider.instance.get(); String context = secretManager.getContext(); - Cache userCache = cacheManager.getCache(context); + Cache userCache = userCachePerContext.get(context); if(userCache == null) { userCache = cacheManager.createCache(context, userCacheConfiguration); + userCachePerContext.put(context, userCache); } String gcubeUsername = secretManager.getUser().getUsername(); @@ -61,16 +68,16 @@ public abstract class CKANUserCache { public synchronized static void removeUserFromCache(String gcubeUsername) { SecretManager secretManager = SecretManagerProvider.instance.get(); String context = secretManager.getContext(); - Cache userCache = cacheManager.getCache(context); + Cache userCache = userCachePerContext.get(context); if(userCache != null) { userCache.remove(gcubeUsername); } } - public synchronized static void emptyUsersCache() { + public synchronized static void emptyUserCache() { SecretManager secretManager = SecretManagerProvider.instance.get(); String context = secretManager.getContext(); - cacheManager.destroyCache(context); + userCachePerContext.remove(context); } @Override