Java: как обрабатывать повторные попытки без кода копирования и вставки?

У меня есть несколько случаев, когда мне приходится иметь дело с повторным испытанием для операций с БД и сетевых операций. Везде, где я это делаю, у меня есть следующий тип кода:

    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 : Подход АОП кажется мне наиболее многообещающим.

8
задан tshepang 12 June 2014 в 21:34
поделиться