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

Add context to retry recovery callback
This commit is contained in:
dsyer
2008-05-11 14:04:03 +00:00
parent 4ed7cc5a25
commit eabac61a40
8 changed files with 15 additions and 20 deletions

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());
}
});

View File

@@ -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());
}
});