org.springframework.cache.interceptor.CacheOperationInvoker Java Examples

The following examples show how to use org.springframework.cache.interceptor.CacheOperationInvoker. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: JCacheAspectSupport.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@SuppressWarnings("unchecked")
private Object execute(CacheOperationInvocationContext<?> context, CacheOperationInvoker invoker) {
	CacheOperationInvoker adapter = new CacheOperationInvokerAdapter(invoker);
	BasicOperation operation = context.getOperation();

	if (operation instanceof CacheResultOperation) {
		return cacheResultInterceptor.invoke(
				(CacheOperationInvocationContext<CacheResultOperation>) context, adapter);
	}
	else if (operation instanceof CachePutOperation) {
		return cachePutInterceptor.invoke(
				(CacheOperationInvocationContext<CachePutOperation>) context, adapter);
	}
	else if (operation instanceof CacheRemoveOperation) {
		return cacheRemoveEntryInterceptor.invoke(
				(CacheOperationInvocationContext<CacheRemoveOperation>) context, adapter);
	}
	else if (operation instanceof CacheRemoveAllOperation) {
		return cacheRemoveAllInterceptor.invoke(
				(CacheOperationInvocationContext<CacheRemoveAllOperation>) context, adapter);
	}
	else {
		throw new IllegalArgumentException("Could not handle " + operation);
	}
}
 
Example #2
Source File: JCacheAspectSupport.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
@SuppressWarnings("unchecked")
private Object execute(CacheOperationInvocationContext<?> context, CacheOperationInvoker invoker) {
	CacheOperationInvoker adapter = new CacheOperationInvokerAdapter(invoker);
	BasicOperation operation = context.getOperation();

	if (operation instanceof CacheResultOperation) {
		return this.cacheResultInterceptor.invoke(
				(CacheOperationInvocationContext<CacheResultOperation>) context, adapter);
	}
	else if (operation instanceof CachePutOperation) {
		return this.cachePutInterceptor.invoke(
				(CacheOperationInvocationContext<CachePutOperation>) context, adapter);
	}
	else if (operation instanceof CacheRemoveOperation) {
		return this.cacheRemoveEntryInterceptor.invoke(
				(CacheOperationInvocationContext<CacheRemoveOperation>) context, adapter);
	}
	else if (operation instanceof CacheRemoveAllOperation) {
		return this.cacheRemoveAllInterceptor.invoke(
				(CacheOperationInvocationContext<CacheRemoveAllOperation>) context, adapter);
	}
	else {
		throw new IllegalArgumentException("Cannot handle " + operation);
	}
}
 
Example #3
Source File: CacheResultInterceptor.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Rewrite the call stack of the specified {@code exception} so that it matches
 * the current call stack up to (included) the specified method invocation.
 * <p>Clone the specified exception. If the exception is not {@code serializable},
 * the original exception is returned. If no common ancestor can be found, returns
 * the original exception.
 * <p>Used to make sure that a cached exception has a valid invocation context.
 * @param exception the exception to merge with the current call stack
 * @param className the class name of the common ancestor
 * @param methodName the method name of the common ancestor
 * @return a clone exception with a rewritten call stack composed of the current call
 * stack up to (included) the common ancestor specified by the {@code className} and
 * {@code methodName} arguments, followed by stack trace elements of the specified
 * {@code exception} after the common ancestor.
 */
private static CacheOperationInvoker.ThrowableWrapper rewriteCallStack(
		Throwable exception, String className, String methodName) {

	Throwable clone = cloneException(exception);
	if (clone == null) {
		return new CacheOperationInvoker.ThrowableWrapper(exception);
	}

	StackTraceElement[] callStack = new Exception().getStackTrace();
	StackTraceElement[] cachedCallStack = exception.getStackTrace();

	int index = findCommonAncestorIndex(callStack, className, methodName);
	int cachedIndex = findCommonAncestorIndex(cachedCallStack, className, methodName);
	if (index == -1 || cachedIndex == -1) {
		return new CacheOperationInvoker.ThrowableWrapper(exception); // Cannot find common ancestor
	}
	StackTraceElement[] result = new StackTraceElement[cachedIndex + callStack.length - index];
	System.arraycopy(cachedCallStack, 0, result, 0, cachedIndex);
	System.arraycopy(callStack, index, result, cachedIndex, callStack.length - index);

	clone.setStackTrace(result);
	return new CacheOperationInvoker.ThrowableWrapper(clone);
}
 
Example #4
Source File: JCacheCustomInterceptorTests.java    From java-technology-stack with MIT License 6 votes vote down vote up
@Override
protected Object invokeOperation(CacheOperationInvoker invoker) {
	try {
		return super.invokeOperation(invoker);
	}
	catch (CacheOperationInvoker.ThrowableWrapper e) {
		Throwable original = e.getOriginal();
		if (original.getClass() == UnsupportedOperationException.class) {
			return 55L;
		}
		else {
			throw new CacheOperationInvoker.ThrowableWrapper(
					new RuntimeException("wrapping original", original));
		}
	}
}
 
Example #5
Source File: CustomInterceptorTests.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Override
protected Object invokeOperation(CacheOperationInvoker invoker) {
	try {
		return super.invokeOperation(invoker);
	}
	catch (CacheOperationInvoker.ThrowableWrapper e) {
		Throwable original = e.getOriginal();
		if (original.getClass() == UnsupportedOperationException.class) {
			return 55L;
		}
		else {
			throw new CacheOperationInvoker.ThrowableWrapper(
					new RuntimeException("wrapping original", original));
		}
	}
}
 
Example #6
Source File: CacheRemoveEntryInterceptor.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CacheRemoveOperation> context,
		CacheOperationInvoker invoker) {
	CacheRemoveOperation operation = context.getOperation();

	final boolean earlyRemove = operation.isEarlyRemove();

	if (earlyRemove) {
		removeValue(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeValue(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper t) {
		Throwable ex = t.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(ex.getClass())) {
			removeValue(context);
		}
		throw t;
	}
}
 
Example #7
Source File: CacheRemoveAllInterceptor.java    From java-technology-stack with MIT License 6 votes vote down vote up
@Override
protected Object invoke(
		CacheOperationInvocationContext<CacheRemoveAllOperation> context, CacheOperationInvoker invoker) {

	CacheRemoveAllOperation operation = context.getOperation();

	boolean earlyRemove = operation.isEarlyRemove();
	if (earlyRemove) {
		removeAll(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeAll(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(original.getClass())) {
			removeAll(context);
		}
		throw ex;
	}
}
 
Example #8
Source File: JCacheInterceptor.java    From java-technology-stack with MIT License 6 votes vote down vote up
@Override
@Nullable
public Object invoke(final MethodInvocation invocation) throws Throwable {
	Method method = invocation.getMethod();

	CacheOperationInvoker aopAllianceInvoker = () -> {
		try {
			return invocation.proceed();
		}
		catch (Throwable ex) {
			throw new CacheOperationInvoker.ThrowableWrapper(ex);
		}
	};

	try {
		return execute(aopAllianceInvoker, invocation.getThis(), method, invocation.getArguments());
	}
	catch (CacheOperationInvoker.ThrowableWrapper th) {
		throw th.getOriginal();
	}
}
 
Example #9
Source File: CacheRemoveEntryInterceptor.java    From java-technology-stack with MIT License 6 votes vote down vote up
@Override
protected Object invoke(
		CacheOperationInvocationContext<CacheRemoveOperation> context, CacheOperationInvoker invoker) {

	CacheRemoveOperation operation = context.getOperation();

	boolean earlyRemove = operation.isEarlyRemove();
	if (earlyRemove) {
		removeValue(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeValue(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper wrapperException) {
		Throwable ex = wrapperException.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(ex.getClass())) {
			removeValue(context);
		}
		throw wrapperException;
	}
}
 
Example #10
Source File: CacheResultInterceptor.java    From java-technology-stack with MIT License 6 votes vote down vote up
/**
 * Rewrite the call stack of the specified {@code exception} so that it matches
 * the current call stack up to (included) the specified method invocation.
 * <p>Clone the specified exception. If the exception is not {@code serializable},
 * the original exception is returned. If no common ancestor can be found, returns
 * the original exception.
 * <p>Used to make sure that a cached exception has a valid invocation context.
 * @param exception the exception to merge with the current call stack
 * @param className the class name of the common ancestor
 * @param methodName the method name of the common ancestor
 * @return a clone exception with a rewritten call stack composed of the current call
 * stack up to (included) the common ancestor specified by the {@code className} and
 * {@code methodName} arguments, followed by stack trace elements of the specified
 * {@code exception} after the common ancestor.
 */
private static CacheOperationInvoker.ThrowableWrapper rewriteCallStack(
		Throwable exception, String className, String methodName) {

	Throwable clone = cloneException(exception);
	if (clone == null) {
		return new CacheOperationInvoker.ThrowableWrapper(exception);
	}

	StackTraceElement[] callStack = new Exception().getStackTrace();
	StackTraceElement[] cachedCallStack = exception.getStackTrace();

	int index = findCommonAncestorIndex(callStack, className, methodName);
	int cachedIndex = findCommonAncestorIndex(cachedCallStack, className, methodName);
	if (index == -1 || cachedIndex == -1) {
		return new CacheOperationInvoker.ThrowableWrapper(exception); // Cannot find common ancestor
	}
	StackTraceElement[] result = new StackTraceElement[cachedIndex + callStack.length - index];
	System.arraycopy(cachedCallStack, 0, result, 0, cachedIndex);
	System.arraycopy(callStack, index, result, cachedIndex, callStack.length - index);

	clone.setStackTrace(result);
	return new CacheOperationInvoker.ThrowableWrapper(clone);
}
 
Example #11
Source File: JCacheInterceptor.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
@Override
public Object invoke(final MethodInvocation invocation) throws Throwable {
	Method method = invocation.getMethod();

	CacheOperationInvoker aopAllianceInvoker = new CacheOperationInvoker() {
		@Override
		public Object invoke() {
			try {
				return invocation.proceed();
			}
			catch (Throwable ex) {
				throw new ThrowableWrapper(ex);
			}
		}
	};

	try {
		return execute(aopAllianceInvoker, invocation.getThis(), method, invocation.getArguments());
	}
	catch (CacheOperationInvoker.ThrowableWrapper th) {
		throw th.getOriginal();
	}
}
 
Example #12
Source File: CustomInterceptorTests.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@Override
protected Object invokeOperation(CacheOperationInvoker invoker) {
	try {
		return super.invokeOperation(invoker);
	}
	catch (CacheOperationInvoker.ThrowableWrapper e) {
		Throwable original = e.getOriginal();
		if (original.getClass() == UnsupportedOperationException.class) {
			return 55L;
		}
		else {
			throw new CacheOperationInvoker.ThrowableWrapper(
					new RuntimeException("wrapping original", original));
		}
	}
}
 
Example #13
Source File: CustomInterceptorTests.java    From java-technology-stack with MIT License 6 votes vote down vote up
@Override
protected Object invokeOperation(CacheOperationInvoker invoker) {
	try {
		return super.invokeOperation(invoker);
	}
	catch (CacheOperationInvoker.ThrowableWrapper e) {
		Throwable original = e.getOriginal();
		if (original.getClass() == UnsupportedOperationException.class) {
			return 55L;
		}
		else {
			throw new CacheOperationInvoker.ThrowableWrapper(
					new RuntimeException("wrapping original", original));
		}
	}
}
 
Example #14
Source File: CacheRemoveEntryInterceptor.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Override
protected Object invoke(
		CacheOperationInvocationContext<CacheRemoveOperation> context, CacheOperationInvoker invoker) {

	CacheRemoveOperation operation = context.getOperation();

	boolean earlyRemove = operation.isEarlyRemove();
	if (earlyRemove) {
		removeValue(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeValue(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper wrapperException) {
		Throwable ex = wrapperException.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(ex.getClass())) {
			removeValue(context);
		}
		throw wrapperException;
	}
}
 
Example #15
Source File: JCacheCustomInterceptorTests.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@Override
protected Object invokeOperation(CacheOperationInvoker invoker) {
	try {
		return super.invokeOperation(invoker);
	}
	catch (CacheOperationInvoker.ThrowableWrapper e) {
		Throwable original = e.getOriginal();
		if (original.getClass() == UnsupportedOperationException.class) {
			return 55L;
		}
		else {
			throw new CacheOperationInvoker.ThrowableWrapper(
					new RuntimeException("wrapping original", original));
		}
	}
}
 
Example #16
Source File: JCacheInterceptor.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@Override
public Object invoke(final MethodInvocation invocation) throws Throwable {
	Method method = invocation.getMethod();

	CacheOperationInvoker aopAllianceInvoker = new CacheOperationInvoker() {
		@Override
		public Object invoke() {
			try {
				return invocation.proceed();
			}
			catch (Throwable ex) {
				throw new ThrowableWrapper(ex);
			}
		}
	};

	try {
		return execute(aopAllianceInvoker, invocation.getThis(), method, invocation.getArguments());
	}
	catch (CacheOperationInvoker.ThrowableWrapper th) {
		throw th.getOriginal();
	}
}
 
Example #17
Source File: CacheRemoveEntryInterceptor.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CacheRemoveOperation> context,
		CacheOperationInvoker invoker) {
	CacheRemoveOperation operation = context.getOperation();

	final boolean earlyRemove = operation.isEarlyRemove();

	if (earlyRemove) {
		removeValue(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeValue(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper t) {
		Throwable ex = t.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(ex.getClass())) {
			removeValue(context);
		}
		throw t;
	}
}
 
Example #18
Source File: CacheResultInterceptor.java    From spring-analysis-note with MIT License 6 votes vote down vote up
/**
 * Rewrite the call stack of the specified {@code exception} so that it matches
 * the current call stack up to (included) the specified method invocation.
 * <p>Clone the specified exception. If the exception is not {@code serializable},
 * the original exception is returned. If no common ancestor can be found, returns
 * the original exception.
 * <p>Used to make sure that a cached exception has a valid invocation context.
 * @param exception the exception to merge with the current call stack
 * @param className the class name of the common ancestor
 * @param methodName the method name of the common ancestor
 * @return a clone exception with a rewritten call stack composed of the current call
 * stack up to (included) the common ancestor specified by the {@code className} and
 * {@code methodName} arguments, followed by stack trace elements of the specified
 * {@code exception} after the common ancestor.
 */
private static CacheOperationInvoker.ThrowableWrapper rewriteCallStack(
		Throwable exception, String className, String methodName) {

	Throwable clone = cloneException(exception);
	if (clone == null) {
		return new CacheOperationInvoker.ThrowableWrapper(exception);
	}

	StackTraceElement[] callStack = new Exception().getStackTrace();
	StackTraceElement[] cachedCallStack = exception.getStackTrace();

	int index = findCommonAncestorIndex(callStack, className, methodName);
	int cachedIndex = findCommonAncestorIndex(cachedCallStack, className, methodName);
	if (index == -1 || cachedIndex == -1) {
		return new CacheOperationInvoker.ThrowableWrapper(exception); // Cannot find common ancestor
	}
	StackTraceElement[] result = new StackTraceElement[cachedIndex + callStack.length - index];
	System.arraycopy(cachedCallStack, 0, result, 0, cachedIndex);
	System.arraycopy(callStack, index, result, cachedIndex, callStack.length - index);

	clone.setStackTrace(result);
	return new CacheOperationInvoker.ThrowableWrapper(clone);
}
 
Example #19
Source File: JCacheCustomInterceptorTests.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Override
protected Object invokeOperation(CacheOperationInvoker invoker) {
	try {
		return super.invokeOperation(invoker);
	}
	catch (CacheOperationInvoker.ThrowableWrapper e) {
		Throwable original = e.getOriginal();
		if (original.getClass() == UnsupportedOperationException.class) {
			return 55L;
		}
		else {
			throw new CacheOperationInvoker.ThrowableWrapper(
					new RuntimeException("wrapping original", original));
		}
	}
}
 
Example #20
Source File: JCacheInterceptor.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Override
@Nullable
public Object invoke(final MethodInvocation invocation) throws Throwable {
	Method method = invocation.getMethod();

	CacheOperationInvoker aopAllianceInvoker = () -> {
		try {
			return invocation.proceed();
		}
		catch (Throwable ex) {
			throw new CacheOperationInvoker.ThrowableWrapper(ex);
		}
	};

	try {
		return execute(aopAllianceInvoker, invocation.getThis(), method, invocation.getArguments());
	}
	catch (CacheOperationInvoker.ThrowableWrapper th) {
		throw th.getOriginal();
	}
}
 
Example #21
Source File: CacheRemoveAllInterceptor.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Override
protected Object invoke(
		CacheOperationInvocationContext<CacheRemoveAllOperation> context, CacheOperationInvoker invoker) {

	CacheRemoveAllOperation operation = context.getOperation();

	boolean earlyRemove = operation.isEarlyRemove();
	if (earlyRemove) {
		removeAll(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeAll(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(original.getClass())) {
			removeAll(context);
		}
		throw ex;
	}
}
 
Example #22
Source File: CacheResultInterceptor.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
/**
 * Rewrite the call stack of the specified {@code exception} so that it matches
 * the current call stack up-to (included) the specified method invocation.
 * <p>Clone the specified exception. If the exception is not {@code serializable},
 * the original exception is returned. If no common ancestor can be found, returns
 * the original exception.
 * <p>Used to make sure that a cached exception has a valid invocation context.
 * @param exception the exception to merge with the current call stack
 * @param className the class name of the common ancestor
 * @param methodName the method name of the common ancestor
 * @return a clone exception with a rewritten call stack composed of the current
 * call stack up to (included) the common ancestor specified by the {@code className} and
 * {@code methodName} arguments, followed by stack trace elements of the specified
 * {@code exception} after the common ancestor.
 */
private static CacheOperationInvoker.ThrowableWrapper rewriteCallStack(
		Throwable exception, String className, String methodName) {

	Throwable clone = cloneException(exception);
	if (clone == null) {
		return new CacheOperationInvoker.ThrowableWrapper(exception);
	}

	StackTraceElement[] callStack = new Exception().getStackTrace();
	StackTraceElement[] cachedCallStack = exception.getStackTrace();

	int index = findCommonAncestorIndex(callStack, className, methodName);
	int cachedIndex = findCommonAncestorIndex(cachedCallStack, className, methodName);
	if (index == -1 || cachedIndex == -1) {
		return new CacheOperationInvoker.ThrowableWrapper(exception); // Cannot find common ancestor
	}
	StackTraceElement[] result = new StackTraceElement[cachedIndex + callStack.length - index];
	System.arraycopy(cachedCallStack, 0, result, 0, cachedIndex);
	System.arraycopy(callStack, index, result, cachedIndex, callStack.length - index);

	clone.setStackTrace(result);
	return new CacheOperationInvoker.ThrowableWrapper(clone);
}
 
Example #23
Source File: CacheRemoveAllInterceptor.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CacheRemoveAllOperation> context,
		CacheOperationInvoker invoker) {

	CacheRemoveAllOperation operation = context.getOperation();

	boolean earlyRemove = operation.isEarlyRemove();

	if (earlyRemove) {
		removeAll(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeAll(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(original.getClass())) {
			removeAll(context);
		}
		throw ex;
	}
}
 
Example #24
Source File: CachePutInterceptor.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CachePutOperation> context,
		CacheOperationInvoker invoker) {

	CacheKeyInvocationContext<CachePut> invocationContext = createCacheKeyInvocationContext(context);
	CachePutOperation operation = context.getOperation();

	boolean earlyPut = operation.isEarlyPut();
	Object value = invocationContext.getValueParameter().getValue();

	if (earlyPut) {
		cacheValue(context, value);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyPut) {
			cacheValue(context, value);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		if (!earlyPut && operation.getExceptionTypeFilter().match(original.getClass())) {
			cacheValue(context, value);
		}
		throw ex;
	}
}
 
Example #25
Source File: JCacheAspectSupport.java    From spring4-understanding with Apache License 2.0 5 votes vote down vote up
protected Object execute(CacheOperationInvoker invoker, Object target, Method method, Object[] args) {
	// Check whether aspect is enabled to cope with cases where the AJ is pulled in automatically
	if (this.initialized) {
		Class<?> targetClass = getTargetClass(target);
		JCacheOperation<?> operation = getCacheOperationSource().getCacheOperation(method, targetClass);
		if (operation != null) {
			CacheOperationInvocationContext<?> context =
					createCacheOperationInvocationContext(target, args, operation);
			return execute(context, invoker);
		}
	}

	return invoker.invoke();
}
 
Example #26
Source File: JCacheInterceptorTests.java    From java-technology-stack with MIT License 5 votes vote down vote up
@Test
public void cacheResultReturnsProperType() throws Throwable {
	JCacheInterceptor interceptor = createInterceptor(createOperationSource(
			cacheManager, defaultCacheResolver, defaultExceptionCacheResolver, defaultKeyGenerator));

	AnnotatedJCacheableService service = new AnnotatedJCacheableService(cacheManager.getCache("default"));
	Method method = ReflectionUtils.findMethod(AnnotatedJCacheableService.class, "cache", String.class);

	CacheOperationInvoker invoker = new DummyInvoker(0L);
	Object execute = interceptor.execute(invoker, service, method, new Object[] {"myId"});
	assertNotNull("result cannot be null.", execute);
	assertEquals("Wrong result type", Long.class, execute.getClass());
	assertEquals("Wrong result", 0L, execute);
}
 
Example #27
Source File: CacheRemoveAllInterceptor.java    From spring4-understanding with Apache License 2.0 5 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CacheRemoveAllOperation> context,
		CacheOperationInvoker invoker) {

	CacheRemoveAllOperation operation = context.getOperation();

	boolean earlyRemove = operation.isEarlyRemove();

	if (earlyRemove) {
		removeAll(context);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyRemove) {
			removeAll(context);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		if (!earlyRemove && operation.getExceptionTypeFilter().match(original.getClass())) {
			removeAll(context);
		}
		throw ex;
	}
}
 
Example #28
Source File: CachePutInterceptor.java    From spring4-understanding with Apache License 2.0 5 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CachePutOperation> context,
		CacheOperationInvoker invoker) {

	CacheKeyInvocationContext<CachePut> invocationContext = createCacheKeyInvocationContext(context);
	CachePutOperation operation = context.getOperation();

	boolean earlyPut = operation.isEarlyPut();
	Object value = invocationContext.getValueParameter().getValue();

	if (earlyPut) {
		cacheValue(context, value);
	}

	try {
		Object result = invoker.invoke();
		if (!earlyPut) {
			cacheValue(context, value);
		}
		return result;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		if (!earlyPut && operation.getExceptionTypeFilter().match(original.getClass())) {
			cacheValue(context, value);
		}
		throw ex;
	}
}
 
Example #29
Source File: JCacheInterceptorTests.java    From spring4-understanding with Apache License 2.0 5 votes vote down vote up
@Test
public void cacheResultReturnsProperType() throws Throwable {
	JCacheInterceptor interceptor = createInterceptor(createOperationSource(
			cacheManager, defaultCacheResolver, defaultExceptionCacheResolver, defaultKeyGenerator));

	AnnotatedJCacheableService service = new AnnotatedJCacheableService(cacheManager.getCache("default"));
	Method method = ReflectionUtils.findMethod(AnnotatedJCacheableService.class, "cache", String.class);

	CacheOperationInvoker invoker = new DummyInvoker(0L);
	Object execute = interceptor.execute(invoker, service, method, new Object[] {"myId"});
	assertNotNull("result cannot be null.", execute);
	assertEquals("Wrong result type", Long.class, execute.getClass());
	assertEquals("Wrong result", 0L, execute);
}
 
Example #30
Source File: CacheResultInterceptor.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected Object invoke(CacheOperationInvocationContext<CacheResultOperation> context,
		CacheOperationInvoker invoker) {

	CacheResultOperation operation = context.getOperation();
	Object cacheKey = generateKey(context);

	Cache cache = resolveCache(context);
	Cache exceptionCache = resolveExceptionCache(context);

	if (!operation.isAlwaysInvoked()) {
		Cache.ValueWrapper cachedValue = doGet(cache, cacheKey);
		if (cachedValue != null) {
			return cachedValue.get();
		}
		checkForCachedException(exceptionCache, cacheKey);
	}

	try {
		Object invocationResult = invoker.invoke();
		doPut(cache, cacheKey, invocationResult);
		return invocationResult;
	}
	catch (CacheOperationInvoker.ThrowableWrapper ex) {
		Throwable original = ex.getOriginal();
		cacheException(exceptionCache, operation.getExceptionTypeFilter(), cacheKey, original);
		throw ex;
	}
}