diff --git a/src/main/java/org/springframework/retry/interceptor/RetryOperationsInterceptor.java b/src/main/java/org/springframework/retry/interceptor/RetryOperationsInterceptor.java
index 97ac085..fcda5cb 100644
--- a/src/main/java/org/springframework/retry/interceptor/RetryOperationsInterceptor.java
+++ b/src/main/java/org/springframework/retry/interceptor/RetryOperationsInterceptor.java
@@ -1,24 +1,25 @@
/*
* Copyright 2006-2007 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
*/
package org.springframework.retry.interceptor;
+import java.util.Arrays;
+
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.ProxyMethodInvocation;
+import org.springframework.retry.ExhaustedRetryException;
+import org.springframework.retry.RecoveryCallback;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.RetryOperations;
@@ -26,17 +27,14 @@ import org.springframework.retry.support.RetryTemplate;
import org.springframework.util.Assert;
/**
- * A {@link MethodInterceptor} that can be used to automatically retry calls to
- * a method on a service if it fails. The injected {@link RetryOperations} is
- * used to control the number of retries. By default it will retry a fixed
- * number of times, according to the defaults in {@link RetryTemplate}.
+ * A {@link MethodInterceptor} that can be used to automatically retry calls to a method on a service if it fails. The
+ * injected {@link RetryOperations} is used to control the number of retries. By default it will retry a fixed number of
+ * times, according to the defaults in {@link RetryTemplate}.
*
- * Hint about transaction boundaries. If you want to retry a failed transaction
- * you need to make sure that the transaction boundary is inside the retry,
- * otherwise the successful attempt will roll back with the whole transaction.
- * If the method being intercepted is also transactional, then use the ordering
- * hints in the advice declarations to ensure that this one is before the
- * transaction interceptor in the advice chain.
+ * Hint about transaction boundaries. If you want to retry a failed transaction you need to make sure that the
+ * transaction boundary is inside the retry, otherwise the successful attempt will roll back with the whole transaction.
+ * If the method being intercepted is also transactional, then use the ordering hints in the advice declarations to
+ * ensure that this one is before the transaction interceptor in the advice chain.
*
* @author Rob Harrop
* @author Dave Syer
@@ -44,31 +42,32 @@ import org.springframework.util.Assert;
public class RetryOperationsInterceptor implements MethodInterceptor {
private RetryOperations retryOperations = new RetryTemplate();
+ private MethodInvocationRecoverer> recoverer;
public void setRetryOperations(RetryOperations retryTemplate) {
Assert.notNull(retryTemplate, "'retryOperations' cannot be null.");
this.retryOperations = retryTemplate;
}
+ public void setRecoverer(MethodInvocationRecoverer> recoverer) {
+ this.recoverer = recoverer;
+ }
+
public Object invoke(final MethodInvocation invocation) throws Throwable {
- return this.retryOperations.execute(new RetryCallback