cache in folder esterna, gestisco errore in retriew
This commit is contained in:
parent
c0f34e3df8
commit
47486ca8a8
|
@ -77,7 +77,7 @@ public class CC_Portlet extends MVCPortlet {
|
||||||
configuration = config;
|
configuration = config;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
_log.error(e);
|
_log.error("cannot obtain configuration", e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.gcube.portlets.user.cloudcomputing.is;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||||
|
|
||||||
|
public class CacheEntry implements Serializable {
|
||||||
|
List<ServiceEndpoint> endpoints;
|
||||||
|
long timestamp;
|
||||||
|
|
||||||
|
CacheEntry(List<ServiceEndpoint> endpoints, long timestamp) {
|
||||||
|
this.endpoints = endpoints;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package org.gcube.portlets.user.cloudcomputing.is;
|
package org.gcube.portlets.user.cloudcomputing.is;
|
||||||
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.rmi.ServerException;
|
import java.rmi.ServerException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -24,35 +23,25 @@ public class CacheIsClient extends IsClient {
|
||||||
|
|
||||||
// Class to represent a cache entry
|
// Class to represent a cache entry
|
||||||
|
|
||||||
static CacheIsClient getSingleton() {
|
static CacheIsClient getSingleton() {
|
||||||
if (_singleInstance == null) {
|
if (_singleInstance == null) {
|
||||||
_singleInstance = new CacheIsClient();
|
_singleInstance = new CacheIsClient();
|
||||||
}
|
}
|
||||||
return _singleInstance;
|
return _singleInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class CacheEntry implements Serializable {
|
|
||||||
List<ServiceEndpoint> endpoints;
|
|
||||||
long timestamp;
|
|
||||||
|
|
||||||
CacheEntry(List<ServiceEndpoint> endpoints, long timestamp) {
|
|
||||||
this.endpoints = endpoints;
|
|
||||||
this.timestamp = timestamp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define the cache name
|
// Define the cache name
|
||||||
private static final String CACHE_NAME = "my-cache";
|
private static final String CACHE_NAME = "my-cache";
|
||||||
private PortalCache<Serializable, Serializable> portalCache = MultiVMPoolUtil.getCache(CACHE_NAME);
|
private PortalCache<Serializable, Serializable> portalCache = MultiVMPoolUtil.getCache(CACHE_NAME);
|
||||||
|
|
||||||
// Method to get the cache key
|
// Method to get the cache key
|
||||||
private String getCacheKey(String resourceName, String category) {
|
private String getCacheKey(String resourceName, String category) {
|
||||||
return resourceName + ":" + category;
|
return "IS_"+ resourceName + ":" + category;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Main method with caching and locking
|
// Main method with caching and locking
|
||||||
public synchronized List<ServiceEndpoint> getEndpointsFromISWithCache(String resource_name, String category) throws ServerException {
|
public synchronized List<ServiceEndpoint> getEndpointsFromISWithCache(String resource_name, String category)
|
||||||
|
throws ServerException {
|
||||||
String key = getCacheKey(resource_name, category);
|
String key = getCacheKey(resource_name, category);
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
@ -60,9 +49,14 @@ public class CacheIsClient extends IsClient {
|
||||||
|
|
||||||
synchronized (key.intern()) {
|
synchronized (key.intern()) {
|
||||||
logger.info("Acquired lock for key: " + key);
|
logger.info("Acquired lock for key: " + key);
|
||||||
|
CacheEntry cacheEntry = null;
|
||||||
// Check if the entry is present in the cache and is valid
|
// Check if the entry is present in the cache and is valid
|
||||||
CacheEntry cacheEntry = (CacheEntry)portalCache.get(key);
|
try {
|
||||||
|
cacheEntry = (CacheEntry) portalCache.get(key);
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
portalCache.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
if (cacheEntry != null) {
|
if (cacheEntry != null) {
|
||||||
if (currentTime - cacheEntry.timestamp <= TimeUnit.MINUTES.toMillis(10)) {
|
if (currentTime - cacheEntry.timestamp <= TimeUnit.MINUTES.toMillis(10)) {
|
||||||
// If the cache value is still valid, return it
|
// If the cache value is still valid, return it
|
||||||
|
@ -92,6 +86,7 @@ public class CacheIsClient extends IsClient {
|
||||||
return endpoints;
|
return endpoints;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Metodo principale con caching e locking
|
// Metodo principale con caching e locking
|
||||||
public List<ServiceEndpoint> getEndpointsFromIS(String resource_name, String category) throws ServerException {
|
public List<ServiceEndpoint> getEndpointsFromIS(String resource_name, String category) throws ServerException {
|
||||||
logger.info("@@@ cached getEndpointsFromIS: " + resource_name + ":" + category);
|
logger.info("@@@ cached getEndpointsFromIS: " + resource_name + ":" + category);
|
||||||
|
@ -99,5 +94,4 @@ public class CacheIsClient extends IsClient {
|
||||||
return getEndpointsFromISWithCache(resource_name, category);
|
return getEndpointsFromISWithCache(resource_name, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,15 +31,6 @@ public class CacheIsClient extends IsClient {
|
||||||
return _singleInstance;
|
return _singleInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class CacheEntry {
|
|
||||||
List<ServiceEndpoint> endpoints;
|
|
||||||
long timestamp;
|
|
||||||
|
|
||||||
CacheEntry(List<ServiceEndpoint> endpoints, long timestamp) {
|
|
||||||
this.endpoints = endpoints;
|
|
||||||
this.timestamp = timestamp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mappa per mantenere la cache
|
// Mappa per mantenere la cache
|
||||||
private ConcurrentHashMap<String, CacheEntry> cache = new ConcurrentHashMap<>();
|
private ConcurrentHashMap<String, CacheEntry> cache = new ConcurrentHashMap<>();
|
||||||
|
|
Loading…
Reference in New Issue