IN PROGRESS - issue BATCH-569: Add RetryOperationsInterceptor with stateful retry

Extract anonymous class to nested static
This commit is contained in:
dsyer
2008-05-11 14:37:45 +00:00
parent eabac61a40
commit 2a5895a944

View File

@@ -113,19 +113,9 @@ public class StatefulRetryOperationsInterceptor implements MethodInterceptor {
}
final Object item = arg;
RecoveryRetryCallback callback = new RecoveryRetryCallback(item, new RetryCallback() {
public Object doWithRetry(RetryContext context) throws Throwable {
return invocation.proceed();
}
}, keyGenerator != null ? keyGenerator.getKey(item) : item);
callback.setRecoveryCallback(new RecoveryCallback() {
public Object recover(RetryContext context) {
if (recoverer != null) {
return recoverer.recover(item, context.getLastThrowable());
}
return item;
}
});
RecoveryRetryCallback callback = new RecoveryRetryCallback(item, new MethodInvocationRetryCallback(invocation),
keyGenerator != null ? keyGenerator.getKey(item) : item);
callback.setRecoveryCallback(new ItemRecovererCallback(item, recoverer));
if (newItemIdentifier != null) {
callback.setForceRefresh(newItemIdentifier.isNew(item));
}
@@ -138,4 +128,53 @@ public class StatefulRetryOperationsInterceptor implements MethodInterceptor {
}
/**
* @author Dave Syer
*
*/
private static final class MethodInvocationRetryCallback implements RetryCallback {
/**
*
*/
private final MethodInvocation invocation;
/**
* @param invocation
*/
private MethodInvocationRetryCallback(MethodInvocation invocation) {
this.invocation = invocation;
}
public Object doWithRetry(RetryContext context) throws Throwable {
return invocation.proceed();
}
}
/**
* @author Dave Syer
*
*/
private static final class ItemRecovererCallback implements RecoveryCallback {
private final Object item;
private final ItemRecoverer recoverer;
/**
* @param item the item that failed.
*/
private ItemRecovererCallback(Object item, ItemRecoverer recoverer) {
this.item = item;
this.recoverer = recoverer;
}
public Object recover(RetryContext context) {
if (recoverer != null) {
return recoverer.recover(item, context.getLastThrowable());
}
return item;
}
}
}