У меня есть несколько случаев, когда мне приходится иметь дело с повторным испытанием для операций с БД и сетевых операций. Везде, где я это делаю, у меня есть следующий тип кода:
for (int iteration = 1; ; iteration++) {
try {
data = doSomethingUseful(data);
break;
} catch (SomeException | AndAnotherException e) {
if (iteration == helper.getNumberOfRetries()) {
throw e;
} else {
errorReporter.reportError("Got following error for data = {}. Continue trying after delay...", data, e);
utilities.defaultDelayForIteration(iteration);
handleSpecificCase(data);
}
}
}
Проблема в том, что этот шаблон кода копируется во все мои классы. Что действительно плохо. Я не могу понять, как избавиться от этого шаблона копирования-вставки for-break-catch, так как я обычно получаю разные исключения для обработки, я хочу регистрировать данные, с которыми я потерпел неудачу (обычно также разными способами).
Есть ли хороший способ избежать этого копирования-вставки в Java 7?
Изменить: Я действительно использую guice для внедрения зависимостей. Я проверил исключения. Вместо одних данных может быть несколько переменных, и все они разного типа.
Edit2 : Подход АОП кажется мне наиболее многообещающим.