Allow null values to be cached with @CacheResult
Even though the JSR-107 spec forbids to store null values, our cache abstraction allows that behaviour with a special handled (and this is the default behaviour). While this was working fine with our own set of annotations, the JSR-107 interceptor counterpart was interpreting the spec sensu strictu. We now allow for that special case as well. Issue: SPR-13641
This commit is contained in:
@@ -89,6 +89,21 @@ public abstract class AbstractAnnotationTests {
|
||||
assertSame(r1, r3);
|
||||
}
|
||||
|
||||
public void testCacheableNull(CacheableService<?> service) throws Exception {
|
||||
Object o1 = new Object();
|
||||
assertNull(cm.getCache("testCache").get(o1));
|
||||
|
||||
Object r1 = service.cacheNull(o1);
|
||||
Object r2 = service.cacheNull(o1);
|
||||
Object r3 = service.cacheNull(o1);
|
||||
|
||||
assertSame(r1, r2);
|
||||
assertSame(r1, r3);
|
||||
|
||||
assertEquals(r3, cm.getCache("testCache").get(o1).get());
|
||||
assertNull("Cached value should be null", r3);
|
||||
}
|
||||
|
||||
public void testEvict(CacheableService<?> service) throws Exception {
|
||||
Object o1 = new Object();
|
||||
|
||||
@@ -457,6 +472,11 @@ public abstract class AbstractAnnotationTests {
|
||||
testCacheable(cs);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCacheableNull() throws Exception {
|
||||
testCacheableNull(cs);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidate() throws Exception {
|
||||
testEvict(cs);
|
||||
|
||||
@@ -40,6 +40,11 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object cacheNull(Object arg1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object conditional(int field) {
|
||||
return null;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,6 +27,8 @@ public interface CacheableService<T> {
|
||||
|
||||
T cache(Object arg1);
|
||||
|
||||
T cacheNull(Object arg1);
|
||||
|
||||
void invalidate(Object arg1);
|
||||
|
||||
void evictEarly(Object arg1);
|
||||
|
||||
@@ -41,6 +41,12 @@ public class DefaultCacheableService implements CacheableService<Long> {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable("testCache")
|
||||
public Long cacheNull(Object arg1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict("testCache")
|
||||
public void invalidate(Object arg1) {
|
||||
|
||||
Reference in New Issue
Block a user