Upgraded to JCache 1.0 RC1
Also completing 4.0's consistency efforts between Spring's cache adapters.
This commit is contained in:
parent
b1460742c3
commit
a884cde18c
|
@ -65,7 +65,6 @@ configure(allprojects) { project ->
|
||||||
maven { url "http://repo.spring.io/libs-release" }
|
maven { url "http://repo.spring.io/libs-release" }
|
||||||
maven { url "http://repo.spring.io/milestone" } // for AspectJ 1.8.0.M1
|
maven { url "http://repo.spring.io/milestone" } // for AspectJ 1.8.0.M1
|
||||||
maven { url "https://repository.apache.org/content/repositories/releases" } // tomcat 8
|
maven { url "https://repository.apache.org/content/repositories/releases" } // tomcat 8
|
||||||
// maven { url "https://repository.apache.org/content/repositories/snapshots" } // tomcat 8 snapshots
|
|
||||||
maven { url "https://maven.java.net/content/repositories/releases" } // javax.websocket, tyrus
|
maven { url "https://maven.java.net/content/repositories/releases" } // javax.websocket, tyrus
|
||||||
maven { url "https://oss.sonatype.org/content/repositories/releases" } // javax.cache
|
maven { url "https://oss.sonatype.org/content/repositories/releases" } // javax.cache
|
||||||
}
|
}
|
||||||
|
@ -506,7 +505,7 @@ project("spring-context-support") {
|
||||||
optional(project(":spring-jdbc")) // for Quartz support
|
optional(project(":spring-jdbc")) // for Quartz support
|
||||||
optional(project(":spring-tx")) // for Quartz support
|
optional(project(":spring-tx")) // for Quartz support
|
||||||
optional("javax.mail:mail:1.4.7")
|
optional("javax.mail:mail:1.4.7")
|
||||||
optional("javax.cache:cache-api:1.0.0-PFD")
|
optional("javax.cache:cache-api:1.0.0-RC1")
|
||||||
optional("com.google.guava:guava:14.0.1")
|
optional("com.google.guava:guava:14.0.1")
|
||||||
optional("net.sf.ehcache:ehcache-core:2.6.5")
|
optional("net.sf.ehcache:ehcache-core:2.6.5")
|
||||||
optional("org.quartz-scheduler:quartz:1.8.6") {
|
optional("org.quartz-scheduler:quartz:1.8.6") {
|
||||||
|
|
|
@ -50,12 +50,12 @@ public class EhCacheCache implements Cache {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public final String getName() {
|
||||||
return this.cache.getName();
|
return this.cache.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Ehcache getNativeCache() {
|
public final Ehcache getNativeCache() {
|
||||||
return this.cache;
|
return this.cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2012 the original author or authors.
|
* Copyright 2002-2013 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -46,7 +46,7 @@ public class EhCacheCacheManager extends AbstractTransactionSupportingCacheManag
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new EhCacheCacheManager for the given backing EhCache.
|
* Create a new EhCacheCacheManager for the given backing EhCache CacheManager.
|
||||||
* @param cacheManager the backing EhCache {@link net.sf.ehcache.CacheManager}
|
* @param cacheManager the backing EhCache {@link net.sf.ehcache.CacheManager}
|
||||||
*/
|
*/
|
||||||
public EhCacheCacheManager(net.sf.ehcache.CacheManager cacheManager) {
|
public EhCacheCacheManager(net.sf.ehcache.CacheManager cacheManager) {
|
||||||
|
@ -71,15 +71,16 @@ public class EhCacheCacheManager extends AbstractTransactionSupportingCacheManag
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<Cache> loadCaches() {
|
protected Collection<Cache> loadCaches() {
|
||||||
Assert.notNull(this.cacheManager, "A backing EhCache CacheManager is required");
|
net.sf.ehcache.CacheManager cacheManager = getCacheManager();
|
||||||
Status status = this.cacheManager.getStatus();
|
Assert.notNull(cacheManager, "A backing EhCache CacheManager is required");
|
||||||
|
Status status = cacheManager.getStatus();
|
||||||
Assert.isTrue(Status.STATUS_ALIVE.equals(status),
|
Assert.isTrue(Status.STATUS_ALIVE.equals(status),
|
||||||
"An 'alive' EhCache CacheManager is required - current cache is " + status.toString());
|
"An 'alive' EhCache CacheManager is required - current cache is " + status.toString());
|
||||||
|
|
||||||
String[] names = this.cacheManager.getCacheNames();
|
String[] names = cacheManager.getCacheNames();
|
||||||
Collection<Cache> caches = new LinkedHashSet<Cache>(names.length);
|
Collection<Cache> caches = new LinkedHashSet<Cache>(names.length);
|
||||||
for (String name : names) {
|
for (String name : names) {
|
||||||
caches.add(new EhCacheCache(this.cacheManager.getEhcache(name)));
|
caches.add(new EhCacheCache(cacheManager.getEhcache(name)));
|
||||||
}
|
}
|
||||||
return caches;
|
return caches;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +91,7 @@ public class EhCacheCacheManager extends AbstractTransactionSupportingCacheManag
|
||||||
if (cache == null) {
|
if (cache == null) {
|
||||||
// check the EhCache cache again
|
// check the EhCache cache again
|
||||||
// (in case the cache was added at runtime)
|
// (in case the cache was added at runtime)
|
||||||
Ehcache ehcache = this.cacheManager.getEhcache(name);
|
Ehcache ehcache = getCacheManager().getEhcache(name);
|
||||||
if (ehcache != null) {
|
if (ehcache != null) {
|
||||||
cache = new EhCacheCache(ehcache);
|
cache = new EhCacheCache(ehcache);
|
||||||
addCache(cache);
|
addCache(cache);
|
||||||
|
|
|
@ -67,16 +67,16 @@ public class GuavaCache implements Cache {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public final String getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public com.google.common.cache.Cache<Object, Object> getNativeCache() {
|
public final com.google.common.cache.Cache<Object, Object> getNativeCache() {
|
||||||
return this.cache;
|
return this.cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAllowNullValues() {
|
public final boolean isAllowNullValues() {
|
||||||
return this.allowNullValues;
|
return this.allowNullValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@ import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.cache.CacheBuilderSpec;
|
import com.google.common.cache.CacheBuilderSpec;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
|
|
||||||
import org.springframework.beans.factory.DisposableBean;
|
|
||||||
import org.springframework.cache.Cache;
|
import org.springframework.cache.Cache;
|
||||||
import org.springframework.cache.CacheManager;
|
import org.springframework.cache.CacheManager;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
@ -49,7 +48,7 @@ import org.springframework.util.Assert;
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
* @see GuavaCache
|
* @see GuavaCache
|
||||||
*/
|
*/
|
||||||
public class GuavaCacheManager implements CacheManager, DisposableBean {
|
public class GuavaCacheManager implements CacheManager {
|
||||||
|
|
||||||
private final ConcurrentMap<String, Cache> cacheMap = new ConcurrentHashMap<String, Cache>(16);
|
private final ConcurrentMap<String, Cache> cacheMap = new ConcurrentHashMap<String, Cache>(16);
|
||||||
|
|
||||||
|
@ -59,6 +58,8 @@ public class GuavaCacheManager implements CacheManager, DisposableBean {
|
||||||
|
|
||||||
private CacheLoader<Object, Object> cacheLoader;
|
private CacheLoader<Object, Object> cacheLoader;
|
||||||
|
|
||||||
|
private boolean allowNullValues = true;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a dynamic GuavaCacheManager,
|
* Construct a dynamic GuavaCacheManager,
|
||||||
|
@ -133,6 +134,24 @@ public class GuavaCacheManager implements CacheManager, DisposableBean {
|
||||||
this.cacheLoader = cacheLoader;
|
this.cacheLoader = cacheLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify whether to accept and convert {@code null} values for all caches
|
||||||
|
* in this cache manager.
|
||||||
|
* <p>Default is "true", despite Guava itself not supporting {@code null} values.
|
||||||
|
* An internal holder object will be used to store user-level {@code null}s.
|
||||||
|
*/
|
||||||
|
public void setAllowNullValues(boolean allowNullValues) {
|
||||||
|
this.allowNullValues = allowNullValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether this cache manager accepts and converts {@code null} values
|
||||||
|
* for all of its caches.
|
||||||
|
*/
|
||||||
|
public boolean isAllowNullValues() {
|
||||||
|
return this.allowNullValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getCacheNames() {
|
public Collection<String> getCacheNames() {
|
||||||
|
@ -160,7 +179,7 @@ public class GuavaCacheManager implements CacheManager, DisposableBean {
|
||||||
* @return the Spring GuavaCache adapter (or a decorator thereof)
|
* @return the Spring GuavaCache adapter (or a decorator thereof)
|
||||||
*/
|
*/
|
||||||
protected Cache createGuavaCache(String name) {
|
protected Cache createGuavaCache(String name) {
|
||||||
return new GuavaCache(name, createNativeGuavaCache(name));
|
return new GuavaCache(name, createNativeGuavaCache(name), isAllowNullValues());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -177,12 +196,4 @@ public class GuavaCacheManager implements CacheManager, DisposableBean {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void destroy() {
|
|
||||||
for (Cache cache : this.cacheMap.values()) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ import org.springframework.util.Assert;
|
||||||
* {@link org.springframework.cache.Cache} implementation on top of a
|
* {@link org.springframework.cache.Cache} implementation on top of a
|
||||||
* {@link javax.cache.Cache} instance.
|
* {@link javax.cache.Cache} instance.
|
||||||
*
|
*
|
||||||
* <p>Note: This class has been updated for JCache 0.11, as of Spring 4.0.
|
* <p>Note: This class has been updated for JCache 1.0, as of Spring 4.0.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 3.2
|
* @since 3.2
|
||||||
|
@ -35,8 +35,7 @@ public class JCacheCache implements Cache {
|
||||||
|
|
||||||
private static final Object NULL_HOLDER = new NullHolder();
|
private static final Object NULL_HOLDER = new NullHolder();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
private final javax.cache.Cache<Object, Object> cache;
|
||||||
private final javax.cache.Cache cache;
|
|
||||||
|
|
||||||
private final boolean allowNullValues;
|
private final boolean allowNullValues;
|
||||||
|
|
||||||
|
@ -45,7 +44,7 @@ public class JCacheCache implements Cache {
|
||||||
* Create an {@link org.springframework.cache.jcache.JCacheCache} instance.
|
* Create an {@link org.springframework.cache.jcache.JCacheCache} instance.
|
||||||
* @param jcache backing JCache Cache instance
|
* @param jcache backing JCache Cache instance
|
||||||
*/
|
*/
|
||||||
public JCacheCache(javax.cache.Cache<?,?> jcache) {
|
public JCacheCache(javax.cache.Cache<Object, Object> jcache) {
|
||||||
this(jcache, true);
|
this(jcache, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +53,7 @@ public class JCacheCache implements Cache {
|
||||||
* @param jcache backing JCache Cache instance
|
* @param jcache backing JCache Cache instance
|
||||||
* @param allowNullValues whether to accept and convert null values for this cache
|
* @param allowNullValues whether to accept and convert null values for this cache
|
||||||
*/
|
*/
|
||||||
public JCacheCache(javax.cache.Cache<?,?> jcache, boolean allowNullValues) {
|
public JCacheCache(javax.cache.Cache<Object, Object> jcache, boolean allowNullValues) {
|
||||||
Assert.notNull(jcache, "Cache must not be null");
|
Assert.notNull(jcache, "Cache must not be null");
|
||||||
this.cache = jcache;
|
this.cache = jcache;
|
||||||
this.allowNullValues = allowNullValues;
|
this.allowNullValues = allowNullValues;
|
||||||
|
@ -62,21 +61,20 @@ public class JCacheCache implements Cache {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public final String getName() {
|
||||||
return this.cache.getName();
|
return this.cache.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public javax.cache.Cache<?,?> getNativeCache() {
|
public final javax.cache.Cache<Object, Object> getNativeCache() {
|
||||||
return this.cache;
|
return this.cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAllowNullValues() {
|
public final boolean isAllowNullValues() {
|
||||||
return this.allowNullValues;
|
return this.allowNullValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public ValueWrapper get(Object key) {
|
public ValueWrapper get(Object key) {
|
||||||
Object value = this.cache.get(key);
|
Object value = this.cache.get(key);
|
||||||
return (value != null ? new SimpleValueWrapper(fromStoreValue(value)) : null);
|
return (value != null ? new SimpleValueWrapper(fromStoreValue(value)) : null);
|
||||||
|
@ -93,13 +91,11 @@ public class JCacheCache implements Cache {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void put(Object key, Object value) {
|
public void put(Object key, Object value) {
|
||||||
this.cache.put(key, toStoreValue(value));
|
this.cache.put(key, toStoreValue(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void evict(Object key) {
|
public void evict(Object key) {
|
||||||
this.cache.remove(key);
|
this.cache.remove(key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ import org.springframework.cache.transaction.AbstractTransactionSupportingCacheM
|
||||||
* {@link org.springframework.cache.CacheManager} implementation
|
* {@link org.springframework.cache.CacheManager} implementation
|
||||||
* backed by a JCache {@link javax.cache.CacheManager}.
|
* backed by a JCache {@link javax.cache.CacheManager}.
|
||||||
*
|
*
|
||||||
* <p>Note: This class has been updated for JCache 0.11, as of Spring 4.0.
|
* <p>Note: This class has been updated for JCache 1.0, as of Spring 4.0.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 3.2
|
* @since 3.2
|
||||||
|
@ -71,17 +71,17 @@ public class JCacheCacheManager extends AbstractTransactionSupportingCacheManage
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify whether to accept and convert null values for all caches
|
* Specify whether to accept and convert {@code null} values for all caches
|
||||||
* in this cache manager.
|
* in this cache manager.
|
||||||
* <p>Default is "true", despite JSR-107 itself not supporting null values.
|
* <p>Default is "true", despite JSR-107 itself not supporting {@code null} values.
|
||||||
* An internal holder object will be used to store user-level null values.
|
* An internal holder object will be used to store user-level {@code null}s.
|
||||||
*/
|
*/
|
||||||
public void setAllowNullValues(boolean allowNullValues) {
|
public void setAllowNullValues(boolean allowNullValues) {
|
||||||
this.allowNullValues = allowNullValues;
|
this.allowNullValues = allowNullValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return whether this cache manager accepts and converts null values
|
* Return whether this cache manager accepts and converts {@code null} values
|
||||||
* for all of its caches.
|
* for all of its caches.
|
||||||
*/
|
*/
|
||||||
public boolean isAllowNullValues() {
|
public boolean isAllowNullValues() {
|
||||||
|
@ -90,8 +90,8 @@ public class JCacheCacheManager extends AbstractTransactionSupportingCacheManage
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
if (this.cacheManager == null) {
|
if (getCacheManager() == null) {
|
||||||
this.cacheManager = Caching.getCachingProvider().getCacheManager();
|
setCacheManager(Caching.getCachingProvider().getCacheManager());
|
||||||
}
|
}
|
||||||
super.afterPropertiesSet();
|
super.afterPropertiesSet();
|
||||||
}
|
}
|
||||||
|
@ -100,9 +100,9 @@ public class JCacheCacheManager extends AbstractTransactionSupportingCacheManage
|
||||||
@Override
|
@Override
|
||||||
protected Collection<Cache> loadCaches() {
|
protected Collection<Cache> loadCaches() {
|
||||||
Collection<Cache> caches = new LinkedHashSet<Cache>();
|
Collection<Cache> caches = new LinkedHashSet<Cache>();
|
||||||
for (String cacheName : this.cacheManager.getCacheNames()) {
|
for (String cacheName : getCacheManager().getCacheNames()) {
|
||||||
javax.cache.Cache<Object, Object> jcache = this.cacheManager.getCache(cacheName);
|
javax.cache.Cache<Object, Object> jcache = getCacheManager().getCache(cacheName);
|
||||||
caches.add(new JCacheCache(jcache, this.allowNullValues));
|
caches.add(new JCacheCache(jcache, isAllowNullValues()));
|
||||||
}
|
}
|
||||||
return caches;
|
return caches;
|
||||||
}
|
}
|
||||||
|
@ -111,11 +111,10 @@ public class JCacheCacheManager extends AbstractTransactionSupportingCacheManage
|
||||||
public Cache getCache(String name) {
|
public Cache getCache(String name) {
|
||||||
Cache cache = super.getCache(name);
|
Cache cache = super.getCache(name);
|
||||||
if (cache == null) {
|
if (cache == null) {
|
||||||
// check the JCache cache again
|
// Check the JCache cache again (in case the cache was added at runtime)
|
||||||
// (in case the cache was added at runtime)
|
javax.cache.Cache<Object, Object> jcache = getCacheManager().getCache(name);
|
||||||
javax.cache.Cache<?,?> jcache = this.cacheManager.getCache(name);
|
|
||||||
if (jcache != null) {
|
if (jcache != null) {
|
||||||
cache = new JCacheCache(jcache, this.allowNullValues);
|
cache = new JCacheCache(jcache, isAllowNullValues());
|
||||||
addCache(cache);
|
addCache(cache);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ import org.springframework.beans.factory.InitializingBean;
|
||||||
* obtaining a pre-defined CacheManager by name through the standard
|
* obtaining a pre-defined CacheManager by name through the standard
|
||||||
* JCache {@link javax.cache.Caching} class.
|
* JCache {@link javax.cache.Caching} class.
|
||||||
*
|
*
|
||||||
* <p>Note: This class has been updated for JCache 0.11, as of Spring 4.0.
|
* <p>Note: This class has been updated for JCache 1.0, as of Spring 4.0.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 3.2
|
* @since 3.2
|
||||||
|
|
|
@ -87,16 +87,16 @@ public class ConcurrentMapCache implements Cache {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public final String getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConcurrentMap<Object, Object> getNativeCache() {
|
public final ConcurrentMap<Object, Object> getNativeCache() {
|
||||||
return this.store;
|
return this.store;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAllowNullValues() {
|
public final boolean isAllowNullValues() {
|
||||||
return this.allowNullValues;
|
return this.allowNullValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ public class ConcurrentMapCacheManager implements CacheManager {
|
||||||
|
|
||||||
private boolean dynamic = true;
|
private boolean dynamic = true;
|
||||||
|
|
||||||
|
private boolean allowNullValues = true;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a dynamic ConcurrentMapCacheManager,
|
* Construct a dynamic ConcurrentMapCacheManager,
|
||||||
|
@ -78,6 +80,25 @@ public class ConcurrentMapCacheManager implements CacheManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify whether to accept and convert {@code null} values for all caches
|
||||||
|
* in this cache manager.
|
||||||
|
* <p>Default is "true", despite ConcurrentHashMap itself not supporting {@code null}
|
||||||
|
* values. An internal holder object will be used to store user-level {@code null}s.
|
||||||
|
*/
|
||||||
|
public void setAllowNullValues(boolean allowNullValues) {
|
||||||
|
this.allowNullValues = allowNullValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether this cache manager accepts and converts {@code null} values
|
||||||
|
* for all of its caches.
|
||||||
|
*/
|
||||||
|
public boolean isAllowNullValues() {
|
||||||
|
return this.allowNullValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getCacheNames() {
|
public Collection<String> getCacheNames() {
|
||||||
return Collections.unmodifiableSet(this.cacheMap.keySet());
|
return Collections.unmodifiableSet(this.cacheMap.keySet());
|
||||||
|
@ -104,7 +125,7 @@ public class ConcurrentMapCacheManager implements CacheManager {
|
||||||
* @return the ConcurrentMapCache (or a decorator thereof)
|
* @return the ConcurrentMapCache (or a decorator thereof)
|
||||||
*/
|
*/
|
||||||
protected Cache createConcurrentMapCache(String name) {
|
protected Cache createConcurrentMapCache(String name) {
|
||||||
return new ConcurrentMapCache(name);
|
return new ConcurrentMapCache(name, isAllowNullValues());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue