IN PROGRESS - issue BATCH-569: Add RetryOperationsInterceptor with stateful retry
Add context to retry recovery callback
This commit is contained in:
@@ -215,9 +215,9 @@ public class StatefulRetryStepFactoryBean extends SkipLimitStepFactoryBean {
|
||||
}
|
||||
}, itemKeyGenerator != null ? itemKeyGenerator.getKey(item) : item);
|
||||
retryCallback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable throwable) {
|
||||
public Object recover(RetryContext context) {
|
||||
if (itemRecoverer != null) {
|
||||
return itemRecoverer.recover(item, throwable);
|
||||
return itemRecoverer.recover(item, context.getLastThrowable());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -25,10 +25,10 @@ package org.springframework.batch.retry;
|
||||
public interface RecoveryCallback {
|
||||
|
||||
/**
|
||||
* @param throwable the cause of the failure that we are to recover from
|
||||
* @param context the current retry context
|
||||
* @return an Object that can be used to replace the callback result that
|
||||
* failed
|
||||
*/
|
||||
Object recover(Throwable throwable);
|
||||
Object recover(RetryContext context);
|
||||
|
||||
}
|
||||
|
||||
@@ -119,9 +119,9 @@ public class StatefulRetryOperationsInterceptor implements MethodInterceptor {
|
||||
}
|
||||
}, keyGenerator != null ? keyGenerator.getKey(item) : item);
|
||||
callback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable cause) {
|
||||
public Object recover(RetryContext context) {
|
||||
if (recoverer != null) {
|
||||
return recoverer.recover(item, cause);
|
||||
return recoverer.recover(item, context.getLastThrowable());
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
@@ -195,11 +195,6 @@ public class RecoveryCallbackRetryPolicy extends AbstractStatefulRetryPolicy {
|
||||
delegate.registerThrowable(this.delegateContext, throwable);
|
||||
}
|
||||
|
||||
public boolean isExternal() {
|
||||
// Not called...
|
||||
throw new UnsupportedOperationException("Not supported - this code should be unreachable.");
|
||||
}
|
||||
|
||||
public boolean shouldRethrow(RetryContext context) {
|
||||
// Not called...
|
||||
throw new UnsupportedOperationException("Not supported - this code should be unreachable.");
|
||||
@@ -210,9 +205,9 @@ public class RecoveryCallbackRetryPolicy extends AbstractStatefulRetryPolicy {
|
||||
retryContextCache.remove(key);
|
||||
RepeatSynchronizationManager.setCompleteOnly();
|
||||
if (recoverer != null) {
|
||||
return recoverer.recover(context.getLastThrowable());
|
||||
return recoverer.recover(context);
|
||||
}
|
||||
logger.info("No recover callback provided. Returning null from recovery step.");
|
||||
logger.info("No recovery callback provided. Returning null from recovery step.");
|
||||
// Don't want to call the delegate here - it would throw an exception
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ public class RecoveryRetryPolicyTests extends TestCase {
|
||||
}
|
||||
});
|
||||
callback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable cause) {
|
||||
public Object recover(RetryContext context) {
|
||||
count++;
|
||||
list.add(input);
|
||||
return input;
|
||||
@@ -189,7 +189,7 @@ public class RecoveryRetryPolicyTests extends TestCase {
|
||||
}
|
||||
});
|
||||
callback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable cause) {
|
||||
public Object recover(RetryContext context) {
|
||||
count++;
|
||||
list.add(input);
|
||||
return input;
|
||||
|
||||
@@ -147,7 +147,7 @@ public class BatchMessageListenerContainerIntegrationTests extends AbstractDepen
|
||||
}
|
||||
}, msg.getJMSMessageID());
|
||||
callback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable throwable) {
|
||||
public Object recover(RetryContext context) {
|
||||
recovered++;
|
||||
logger.debug("Recovered: " + msg);
|
||||
return msg;
|
||||
|
||||
@@ -149,8 +149,8 @@ public class ExternalRetryInBatchTests extends AbstractDependencyInjectionSpring
|
||||
});
|
||||
|
||||
callback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable throwable) {
|
||||
return provider.recover(item, throwable);
|
||||
public Object recover(RetryContext context) {
|
||||
return provider.recover(item, context.getLastThrowable());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -199,8 +199,8 @@ public class ExternalRetryTests extends AbstractDependencyInjectionSpringContext
|
||||
});
|
||||
|
||||
callback.setRecoveryCallback(new RecoveryCallback() {
|
||||
public Object recover(Throwable throwable) {
|
||||
return provider.recover(item, throwable);
|
||||
public Object recover(RetryContext context) {
|
||||
return provider.recover(item, context.getLastThrowable());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user