polishing

This commit fixes the handling of cached exceptions in the JSR-107
advisor. Such exceptions are now properly propagated instead of being
wrapped in a RuntimeException.

Issue: SPR-9616
This commit is contained in:
Stephane Nicoll
2014-04-08 17:03:31 +02:00
parent 0bdece700f
commit 3cda355e7f
6 changed files with 82 additions and 14 deletions

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cache.jcache.config.aspectj;
package org.springframework.cache.aspectj;
import org.springframework.cache.jcache.config.AbstractJCacheAnnotationTests;
import org.springframework.context.ApplicationContext;

View File

@@ -16,6 +16,10 @@
package org.springframework.cache.config;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import javax.cache.annotation.CacheDefaults;
import javax.cache.annotation.CacheKey;
import javax.cache.annotation.CachePut;
@@ -23,8 +27,6 @@ import javax.cache.annotation.CacheRemove;
import javax.cache.annotation.CacheRemoveAll;
import javax.cache.annotation.CacheResult;
import javax.cache.annotation.CacheValue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.cache.Cache;
import org.springframework.cache.jcache.config.JCacheableService;
@@ -64,6 +66,13 @@ public class AnnotatedJCacheableService implements JCacheableService<Long> {
return 0L; // Never reached
}
@Override
@CacheResult(exceptionCacheName = "exception", nonCachedExceptions = NullPointerException.class)
public Long cacheWithCheckedException(@CacheKey String id, boolean matchFilter) throws IOException {
throwCheckedException(matchFilter);
return 0L; // Never reached
}
@Override
@CacheResult(skipGet = true)
public Long cacheAlwaysInvoke(String id) {
@@ -177,12 +186,6 @@ public class AnnotatedJCacheableService implements JCacheableService<Long> {
public void noAnnotation() {
}
@CacheRemove
@CacheRemoveAll
public void multiAnnotations() {
}
@Override
public long exceptionInvocations() {
return exceptionCounter.get();
@@ -198,4 +201,14 @@ public class AnnotatedJCacheableService implements JCacheableService<Long> {
}
}
private void throwCheckedException(boolean matchFilter) throws IOException {
long count = exceptionCounter.getAndIncrement();
if (matchFilter) {
throw new IOException("Expected exception (" + count + ")");
}
else {
throw new NullPointerException("Expected exception (" + count + ")");
}
}
}