com.jayway.jsonpath.spi.cache.CacheProvider Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.dynamic.data.mapping.service Show documentation
Show all versions of com.liferay.dynamic.data.mapping.service Show documentation
Liferay Dynamic Data Mapping Service
The newest version!
package com.jayway.jsonpath.spi.cache;
import com.jayway.jsonpath.JsonPathException;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import static com.jayway.jsonpath.internal.Utils.notNull;
public class CacheProvider {
private static final AtomicReferenceFieldUpdater UPDATER =
AtomicReferenceFieldUpdater.newUpdater(CacheProvider.class, Cache.class, "cache");
private static final CacheProvider instance = new CacheProvider();
private volatile Cache cache;
private static class CacheHolder {
static final Cache CACHE;
static {
Cache cache = CacheProvider.instance.cache;
// the application is trying to use the cache
// and if no external implementation has been registered,
// we need to initialise it to the default LRUCache
if (cache == null) {
cache = getDefaultCache();
// on the off chance that the cache implementation was registered during
// initialisation of the holder, this should be respected, so if the
// default cache can't be written back, just read the user supplied value again
if (!UPDATER.compareAndSet(instance, null, cache)) {
cache = CacheProvider.instance.cache;
}
}
CACHE = cache;
}
}
public static void setCache(Cache cache){
notNull(cache, "Cache may not be null");
if (!UPDATER.compareAndSet(instance, null, cache)) {
throw new JsonPathException("Cache provider must be configured before cache is accessed and must not be registered twice.");
}
}
public static Cache getCache() {
return CacheHolder.CACHE;
}
private static Cache getDefaultCache(){
return new LRUCache(400);
//return new NOOPCache();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy