diff --git a/src/main/java/org/gcube/datatransfer/resolver/caches/CatalogueApplicationProfilesGuavaCache.java b/src/main/java/org/gcube/datatransfer/resolver/caches/CatalogueApplicationProfilesGuavaCache.java new file mode 100644 index 0000000..8111608 --- /dev/null +++ b/src/main/java/org/gcube/datatransfer/resolver/caches/CatalogueApplicationProfilesGuavaCache.java @@ -0,0 +1,60 @@ +/** + * + */ +package org.gcube.datatransfer.resolver.caches; + +import java.util.concurrent.TimeUnit; + +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; + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Nov 5, 2018 + */ +public class CatalogueApplicationProfilesGuavaCache { + + private static Logger logger = LoggerFactory.getLogger(CatalogueApplicationProfilesGuavaCache.class); + private static LoadingCache catalogueApplicationProfiles; + + static{ + + CacheLoader loader = new CacheLoader(){ + + @Override + public String load(String arg0) + throws Exception { + + logger.info(CatalogueApplicationProfilesGuavaCache.class.getSimpleName() +" loaded"); + //ApplicationProfileReaderForCatalogueResolver appPrCatResolver = new ApplicationProfileReaderForCatalogueResolver(scopeToEncDecr, true); + return null; + } + + }; + + RemovalListener removalListener = new RemovalListener() { + + @Override + public void onRemoval(RemovalNotification arg0) { + + logger.info(CatalogueApplicationProfilesGuavaCache.class.getSimpleName() +" cache expired"); + + } + }; + + catalogueApplicationProfiles = CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite( + 1, TimeUnit.HOURS).removalListener(removalListener). + build(loader); + + + + } +} diff --git a/src/main/java/org/gcube/datatransfer/resolver/caches/GeoExplorerApplicationURLGuavaCache.java b/src/main/java/org/gcube/datatransfer/resolver/caches/GeoExplorerApplicationURLGuavaCache.java index eb87d6d..9403163 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/caches/GeoExplorerApplicationURLGuavaCache.java +++ b/src/main/java/org/gcube/datatransfer/resolver/caches/GeoExplorerApplicationURLGuavaCache.java @@ -27,6 +27,8 @@ import com.google.common.cache.RemovalNotification; public class GeoExplorerApplicationURLGuavaCache { private static Logger logger = LoggerFactory.getLogger(GeoExplorerApplicationURLGuavaCache.class); + + //A cache (Scope, GeoExplorer-URL) private static LoadingCache geoExplorerApplicationURLCache; static { @@ -35,7 +37,7 @@ public class GeoExplorerApplicationURLGuavaCache { @Override public String load(String scope) throws Exception { - logger.info(GeoExplorerApplicationURLGuavaCache.class.getSimpleName() +" instancied"); + logger.info(GeoExplorerApplicationURLGuavaCache.class.getSimpleName() +" loaded"); return loadGeoExplorerApplicationURL(scope); } }; @@ -48,8 +50,10 @@ public class GeoExplorerApplicationURLGuavaCache { geoExplorerApplicationURLCache = CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite( - 1, TimeUnit.HOURS).removalListener(removalListener). + 1, TimeUnit.DAYS).removalListener(removalListener). build(loader); + + logger.info(GeoExplorerApplicationURLGuavaCache.class.getSimpleName() +" instancied"); } /** diff --git a/src/main/java/org/gcube/datatransfer/resolver/caches/GeoentworkInstanceGuavaCache.java b/src/main/java/org/gcube/datatransfer/resolver/caches/GeonetworkInstanceGuavaCache.java similarity index 61% rename from src/main/java/org/gcube/datatransfer/resolver/caches/GeoentworkInstanceGuavaCache.java rename to src/main/java/org/gcube/datatransfer/resolver/caches/GeonetworkInstanceGuavaCache.java index ec9c8c9..b88b5d0 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/caches/GeoentworkInstanceGuavaCache.java +++ b/src/main/java/org/gcube/datatransfer/resolver/caches/GeonetworkInstanceGuavaCache.java @@ -10,13 +10,14 @@ import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter; import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter.GeonetworkLoginLevel; import org.gcube.datatransfer.resolver.gis.GeonetworkInstance; import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; -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; /** @@ -25,26 +26,36 @@ import com.google.common.cache.LoadingCache; * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * Nov 2, 2018 */ -public class GeoentworkInstanceGuavaCache { +public class GeonetworkInstanceGuavaCache { - private static Logger logger = LoggerFactory.getLogger(UriResolverStartupListener.class); + private static Logger logger = LoggerFactory.getLogger(GeonetworkInstanceGuavaCache.class); + //A cache (Scope, GeonetworkInstance) private static LoadingCache geonetworkInstancesCache; + static { + + CacheLoader loader = new CacheLoader () { + @Override + public GeonetworkInstance load(String scope) + throws Exception { + logger.info(GeonetworkInstanceGuavaCache.class.getSimpleName() +" loaded"); + return loadGeonetworkInstance(scope); + } + }; + + RemovalListener removalListener = new RemovalListener() { + public void onRemoval(RemovalNotification removal) { + logger.info(GeonetworkInstanceGuavaCache.class.getSimpleName() +" cache expired"); + } + }; + geonetworkInstancesCache = - CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite( - 10, TimeUnit.MINUTES).build( - new CacheLoader() { + CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite( + 1, TimeUnit.DAYS).removalListener(removalListener). + build(loader); - @Override - public GeonetworkInstance load(String scope) - throws Exception { - - return loadGeonetworkInstance(scope); - } - }); - - logger.info(GeoentworkInstanceGuavaCache.class.getSimpleName() +" instancied"); + logger.info(GeonetworkInstanceGuavaCache.class.getSimpleName() +" instancied"); } diff --git a/src/main/java/org/gcube/datatransfer/resolver/caches/GisViewerApplicationURLGuavaCache.java b/src/main/java/org/gcube/datatransfer/resolver/caches/GisViewerApplicationURLGuavaCache.java index 158b5ec..6464cf6 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/caches/GisViewerApplicationURLGuavaCache.java +++ b/src/main/java/org/gcube/datatransfer/resolver/caches/GisViewerApplicationURLGuavaCache.java @@ -14,6 +14,8 @@ 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 GisViewerApplicationHostnameGuavaCache. @@ -24,21 +26,31 @@ import com.google.common.cache.LoadingCache; public class GisViewerApplicationURLGuavaCache { private static Logger logger = LoggerFactory.getLogger(GisViewerApplicationURLGuavaCache.class); + + //A cache (Scope, GisViewerApplication-URL) private static LoadingCache gisViewerApplicationURLCache; static { + + CacheLoader loader = new CacheLoader () { + @Override + public String load(String scope) + throws Exception { + logger.info(GisViewerApplicationURLGuavaCache.class.getSimpleName() +" loaded"); + return loadGisViewerApplicationURL(scope); + } + }; + + RemovalListener removalListener = new RemovalListener() { + public void onRemoval(RemovalNotification removal) { + logger.info(GisViewerApplicationURLGuavaCache.class.getSimpleName() +" cache expired"); + } + }; + gisViewerApplicationURLCache = - CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite( - 1, TimeUnit.HOURS).build( - new CacheLoader() { - - @Override - public String load(String scope) - throws Exception { - - return loadGisViewerApplicationURL(scope); - } - }); + CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite( + 1, TimeUnit.DAYS).removalListener(removalListener). + build(loader); logger.info(GisViewerApplicationURLGuavaCache.class.getSimpleName() +" instancied"); } diff --git a/src/main/java/org/gcube/datatransfer/resolver/listeners/UriResolverStartupListener.java b/src/main/java/org/gcube/datatransfer/resolver/listeners/UriResolverStartupListener.java index 3f3dd4b..9218be0 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/listeners/UriResolverStartupListener.java +++ b/src/main/java/org/gcube/datatransfer/resolver/listeners/UriResolverStartupListener.java @@ -14,7 +14,7 @@ import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; -import org.gcube.datatransfer.resolver.caches.GeoentworkInstanceGuavaCache; +import org.gcube.datatransfer.resolver.caches.GeonetworkInstanceGuavaCache; import org.gcube.datatransfer.resolver.caches.GisViewerApplicationURLGuavaCache; import org.gcube.datatransfer.resolver.gis.property.ApplicationProfileGenericResourceReader; import org.gcube.datatransfer.resolver.gis.property.PropertyFileNotFoundException; @@ -56,7 +56,7 @@ public class UriResolverStartupListener implements ServletContextListener { logger.info("Context initialized!"); gisViewerProfile = loadApplicationProfile(event.getServletContext(), GIS_VIEWER_GENERIC_RESOURCE_GCUBE_APPS_PROPERTIES); geoExplorerProfile = loadApplicationProfile(event.getServletContext(), GEO_EXPLORER_GENERIC_RESOURCE_GCUBE_APPS_PROPERTIES); - new GeoentworkInstanceGuavaCache(); + new GeonetworkInstanceGuavaCache(); new GisViewerApplicationURLGuavaCache(); } diff --git a/src/main/java/org/gcube/datatransfer/resolver/services/GisResolver.java b/src/main/java/org/gcube/datatransfer/resolver/services/GisResolver.java index 44cea79..4f3da29 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/services/GisResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/services/GisResolver.java @@ -16,7 +16,7 @@ import javax.ws.rs.core.Response; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.datatransfer.resolver.caches.GeoExplorerApplicationURLGuavaCache; -import org.gcube.datatransfer.resolver.caches.GeoentworkInstanceGuavaCache; +import org.gcube.datatransfer.resolver.caches.GeonetworkInstanceGuavaCache; import org.gcube.datatransfer.resolver.caches.GisViewerApplicationURLGuavaCache; import org.gcube.datatransfer.resolver.gis.GeonetworkInstance; import org.gcube.datatransfer.resolver.gis.MetadataConverter; @@ -203,13 +203,13 @@ public class GisResolver { protected GeonetworkInstance getCachedGeonetworkInstance(String scope) throws Exception{ logger.info("Attempt to get the GeonetworkInstance from cache by scope: "+scope); - GeonetworkInstance geonInstance = GeoentworkInstanceGuavaCache.getCache().get(scope); + GeonetworkInstance geonInstance = GeonetworkInstanceGuavaCache.getCache().get(scope); if(geonInstance==null){ logger.info("GeonetworkInstance is null in cache, reading from library..."); try { - geonInstance = GeoentworkInstanceGuavaCache.loadGeonetworkInstance(scope); - GeoentworkInstanceGuavaCache.getCache().put(scope, geonInstance); + geonInstance = GeonetworkInstanceGuavaCache.loadGeonetworkInstance(scope); + GeonetworkInstanceGuavaCache.getCache().put(scope, geonInstance); logger.info("Updated GeonetworkInstance cache! Scope "+scope+" linking "+geonInstance); } catch (Exception e) { logger.error("An error occurred on getting GeonetworkInstance for scope: "+scope, e);