org.springframework.batch.retry.interceptor
Class StatefulRetryOperationsInterceptor

java.lang.Object
  extended by org.springframework.batch.retry.interceptor.StatefulRetryOperationsInterceptor
All Implemented Interfaces:
org.aopalliance.aop.Advice, org.aopalliance.intercept.Interceptor, org.aopalliance.intercept.MethodInterceptor

public class StatefulRetryOperationsInterceptor
extends Object
implements org.aopalliance.intercept.MethodInterceptor

A MethodInterceptor that can be used to automatically retry calls to a method on a service if it fails. The argument to the service method is treated as an item to be remembered in case the call fails. So the retry operation is stateful, and the item that failed is tracked by its unique key (via ItemKeyGenerator) until the retry is exhausted, at which point the ItemRecoverer is called.
The main use case for this is where the service is transactional, via a transaction interceptor on the interceptor chain. In this case the retry (and recovery on exhausted) always happens in a new transaction.
The injected RetryOperations is used to control the number of retries. By default it will retry a fixed number of times, according to the defaults in RetryTemplate.

Author:
Dave Syer

Constructor Summary
StatefulRetryOperationsInterceptor()
           
 
Method Summary
 Object invoke(org.aopalliance.intercept.MethodInvocation invocation)
          Wrap the method invocation in a stateful retry with the policy and other helpers provided.
 void setKeyGenerator(ItemKeyGenerator keyGenerator)
           
 void setNewItemIdentifier(NewItemIdentifier newItemIdentifier)
          Public setter for the NewItemIdentifier.
 void setRecoverer(ItemRecoverer recoverer)
          Public setter for the ItemRecoverer to use if the retry is exhausted.
 void setRetryPolicy(RetryPolicy retryPolicy)
          Public setter for the retryPolicy.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StatefulRetryOperationsInterceptor

public StatefulRetryOperationsInterceptor()
Method Detail

setRecoverer

public void setRecoverer(ItemRecoverer recoverer)
Public setter for the ItemRecoverer to use if the retry is exhausted. The recoverer should be able to return an object of the same type as the target object because its return value will be used to return to the caller in the case of a recovery.
If no recoverer is set then an exhausted retry will result in an ExhaustedRetryException.

Parameters:
recoverer - the ItemRecoverer to set

setKeyGenerator

public void setKeyGenerator(ItemKeyGenerator keyGenerator)

setRetryPolicy

public void setRetryPolicy(RetryPolicy retryPolicy)
Public setter for the retryPolicy. The value provided should be a normal stateless policy, which is wrapped into a stateful policy inside this method.

Parameters:
retryPolicy - the retryPolicy to set

setNewItemIdentifier

public void setNewItemIdentifier(NewItemIdentifier newItemIdentifier)
Public setter for the NewItemIdentifier. Only set this if the arguments to the intercepted method can be inspected to find out if they have never been processed before.

Parameters:
newItemIdentifier - the NewItemIdentifier to set

invoke

public Object invoke(org.aopalliance.intercept.MethodInvocation invocation)
              throws Throwable
Wrap the method invocation in a stateful retry with the policy and other helpers provided. If there is a failure the exception will generally be re-thrown. The only time it is not re-thrown is when retry is exhausted and the recovery path is taken (though the ItemRecoverer provided if there is one). In that case the value returned from the method invocation will be the value returned by the recoverer (so the return type for that should be the same as the intercepted method).

Specified by:
invoke in interface org.aopalliance.intercept.MethodInterceptor
Throws:
ExhaustedRetryException - if the retry is exhausted and no ItemRecoverer is provided.
Throwable
See Also:
MethodInterceptor.invoke(org.aopalliance.intercept.MethodInvocation), ItemRecoverer.recover(Object, Throwable)


Copyright © 2009 SpringSource. All Rights Reserved.