JCabi аспекты @RetryOnFailure, как бросить исключение

Я хочу вручную вызвать повторную попытку метода с помощью JCabi. Аспектно-ориентированное программирование должно облегчить это, но я не могу понять это.

import com.jcabi.aspects.RetryOnFailure;

public class Example
{

    public int j;

    @RetryOnFailure(attempts = 4, delay = 100, verbose = true)
    public void retryFun() throws Exception
    {
        j++;
        if(j<3)
            throw new Exception();
        else
            return;
    }

    public static void main(String[] args) throws Exception
    {
        Example example = new Example();
        System.out.println(example.j);
        example.retryFun();
        System.out.println(example.j);
    }
}

Единственный пример, доступный в jcabi, - это нижеприведенный пример, который не показывает, как вызвать исключение, чтобы вызвать повторный вызов:

Аннотируйте ваши методы аннотацией @RetryOnFailure, и в случае исключения в методе его выполнение будет повторяться несколько раз:

public class Resource {
  @RetryOnFailure(attempts = 2, delay = 10, verbose = false)
  public String load(URL url) {
    return url.openConnection().getContent();
  }
}

В исключительной ситуации метод будет повторяться два раза с задержкой 10 мсек между попытками.

4 ответа

Решение

Действительно, просто использование аннотаций jcabi недостаточно. Вы должны "сплести" свой исходный код или двоичные файлы. Я бы порекомендовал сплетать двоичные файлы, как описано здесь: http://aspects.jcabi.com/example-weaving.html. Добавьте этот плагин к вашему pom.xml и вы сделали:

<plugin>
    <groupId>com.jcabi</groupId>
    <artifactId>jcabi-maven-plugin</artifactId>
    <version>0.8</version>
    <executions>
      <execution>
        <goals>
          <goal>ajc</goal>
        </goals>
      </execution>
    </executions>
</plugin>

Для тех из вас, кто еще ищет ответ, ответ Егора устарел. Версия jcabi-maven-plugin 0.8 он написал, не работает для меня.

После нескольких часов копания я обнаружил, что мы должны использовать последнюю версию. На данный момент июль 2014 0.9.2,

Это был мой ответ, почему при запуске mvn jcabi:ajc я получал ошибки по ссылке, а также ткачество не работало.

Хорошо, к сожалению, я обнаружил, что эти аспекты jcabi нуждаются в специальной задаче pom.xml для компиляции требуемых аспектов в проекте.

Таким образом, удаления jcabi jar внутри NetBeans и компиляции приведенного выше кода недостаточно.

В качестве альтернативы, вы можете добавить эти настройки в pom.xml для переплетения во время компиляции.

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
  <version>1.4</version>
  <configuration>
      <complianceLevel>1.6</complianceLevel>
      <encoding>${project.build.sourceEncoding}</encoding>
      <showWeaveInfo>true</showWeaveInfo>
      <source>1.7</source>
      <target>1.7</target>
      <verbose>true</verbose>
      <aspectLibraries>
          <aspectLibrary>
              <groupId>com.jcabi</groupId>
              <artifactId>jcabi-aspects</artifactId>
          </aspectLibrary>
      </aspectLibraries>
  </configuration>
  <executions>
      <execution>
          <id>weave-classes</id>
          <phase>process-classes</phase>
          <goals>
              <goal>compile</goal>
          </goals>
      </execution>
  </executions>
</plugin>

Ссылка: http://aspects.jcabi.com/example-aspectj.html

Другие вопросы по тегам