in commons-jcs3-jcache/src/main/java/org/apache/commons/jcs3/jcache/cdi/CacheResultInterceptor.java [47:108]
public Object cache(final InvocationContext ic) throws Throwable
{
final CDIJCacheHelper.MethodMeta methodMeta = helper.findMeta(ic);
final String cacheName = methodMeta.getCacheResultCacheName();
final CacheResult cacheResult = methodMeta.getCacheResult();
final CacheKeyInvocationContext<CacheResult> context = new CacheKeyInvocationContextImpl<>(
ic, cacheResult, cacheName, methodMeta);
final CacheResolverFactory cacheResolverFactory = methodMeta.getCacheResultResolverFactory();
final CacheResolver cacheResolver = cacheResolverFactory.getCacheResolver(context);
final Cache<Object, Object> cache = cacheResolver.resolveCache(context);
final GeneratedCacheKey cacheKey = methodMeta.getCacheResultKeyGenerator().generateCacheKey(context);
Cache<Object, Object> exceptionCache = null; // lazily created
Object result;
if (!cacheResult.skipGet())
{
result = cache.get(cacheKey);
if (result != null)
{
return result;
}
if (!cacheResult.exceptionCacheName().isEmpty())
{
exceptionCache = cacheResolverFactory.getExceptionCacheResolver(context).resolveCache(context);
final Object exception = exceptionCache.get(cacheKey);
if (exception != null)
{
throw Throwable.class.cast(exception);
}
}
}
try
{
result = ic.proceed();
if (result != null)
{
cache.put(cacheKey, result);
}
return result;
}
catch (final Throwable t)
{
if (helper.isIncluded(t.getClass(), cacheResult.cachedExceptions(), cacheResult.nonCachedExceptions()))
{
if (exceptionCache == null)
{
exceptionCache = cacheResolverFactory.getExceptionCacheResolver(context).resolveCache(context);
}
exceptionCache.put(cacheKey, t);
}
throw t;
}
}