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