108 lines
3.1 KiB
Java
108 lines
3.1 KiB
Java
/**
|
|
*
|
|
*/
|
|
package org.gcube.datatransfer.resolver.caches;
|
|
|
|
import java.util.concurrent.ExecutionException;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import org.gcube.datatransfer.resolver.catalogue.resource.ApplicationProfileReaderForCatalogueResolver;
|
|
import org.gcube.datatransfer.resolver.listeners.UriResolverStartupListener;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.google.common.cache.CacheBuilder;
|
|
import com.google.common.cache.CacheLoader;
|
|
import com.google.common.cache.LoadingCache;
|
|
import com.google.common.cache.RemovalListener;
|
|
import com.google.common.cache.RemovalNotification;
|
|
|
|
|
|
|
|
/**
|
|
* The Class CatalogueApplicationProfilesCache.
|
|
*
|
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
|
* Nov 5, 2018
|
|
*/
|
|
public class CatalogueApplicationProfilesCache {
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(CatalogueApplicationProfilesCache.class);
|
|
private static LoadingCache<String, String> catalogueApplicationProfiles;
|
|
|
|
static{
|
|
|
|
CacheLoader<String, String> loader = new CacheLoader<String, String>(){
|
|
|
|
@Override
|
|
public String load(String vreName)
|
|
throws Exception {
|
|
|
|
logger.info(CatalogueApplicationProfilesCache.class.getSimpleName() +" loaded");
|
|
return loadApplicationProfiles(vreName);
|
|
}
|
|
|
|
};
|
|
|
|
RemovalListener<String, String> removalListener = new RemovalListener<String, String>() {
|
|
|
|
@Override
|
|
public void onRemoval(RemovalNotification<String, String> arg0) {
|
|
|
|
logger.info(CatalogueApplicationProfilesCache.class.getSimpleName() +" cache expired");
|
|
|
|
}
|
|
};
|
|
|
|
catalogueApplicationProfiles = CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite(
|
|
1, TimeUnit.HOURS).removalListener(removalListener).
|
|
build(loader);
|
|
|
|
//PRE-POPULATE CACHE
|
|
ApplicationProfileReaderForCatalogueResolver appPrCatResolver = new ApplicationProfileReaderForCatalogueResolver(UriResolverStartupListener.getContextScope(), true);
|
|
catalogueApplicationProfiles.asMap().putAll(appPrCatResolver.getHashVreNameScope());
|
|
|
|
logger.info(CatalogueApplicationProfilesCache.class.getSimpleName() +" instancied "+catalogueApplicationProfiles);
|
|
logger.info("Pre-Loaded cache is: "+catalogueApplicationProfiles.toString());
|
|
|
|
}
|
|
|
|
/**
|
|
* Gets the cache.
|
|
*
|
|
* @return the cache
|
|
*/
|
|
public static LoadingCache<String, String> getCache(){
|
|
return catalogueApplicationProfiles;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Load application profiles.
|
|
*
|
|
* @param vreName the vre name
|
|
* @return the string
|
|
*/
|
|
public static String loadApplicationProfiles(String vreName){
|
|
|
|
String fullScope = null;
|
|
try {
|
|
|
|
fullScope = catalogueApplicationProfiles.get(vreName);
|
|
}
|
|
catch (ExecutionException e) {
|
|
logger.warn("ExecutionException: ",e);
|
|
}
|
|
|
|
if(fullScope==null){
|
|
logger.debug("FullScope is null for VRE_NAME: "+vreName+" into Application Profile: "+ApplicationProfileReaderForCatalogueResolver.RESOURCE_NAME+", reading profile again");
|
|
ApplicationProfileReaderForCatalogueResolver appPrCatResolver = new ApplicationProfileReaderForCatalogueResolver(UriResolverStartupListener.getContextScope(), true);
|
|
catalogueApplicationProfiles.asMap().putAll(appPrCatResolver.getHashVreNameScope());
|
|
}
|
|
|
|
return fullScope;
|
|
}
|
|
|
|
}
|