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>