JCabi方面@RetryOnFailure如何抛出异常

时间:2013-09-19 13:37:28

标签: java aop jcabi

我想通过使用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 个答案:

答案 0 :(得分:7)

对于那些仍在寻找答案的人来说,叶戈尔的答案现在已经过时了。他发布的jcabi-maven-plugin版本0.8并不适合我。

经过几个小时的挖掘后,我发现this表示我们应该使用最新版本截至2014年7月,0.9.2

这是我回答为什么在运行 mvn jcabi:ajc 时我从链接中收到错误以及编织无效的原因。

答案 1 :(得分:2)

实际上,仅仅使用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>

答案 2 :(得分:0)

不幸的是,我发现这些jcabi方面需要一个自定义的pom.xml任务来编译项目中所需的方面。

因此,将jcabi jar放入NetBeans并编译上述代码是不够的。

答案 3 :(得分:0)

替代方案,您可以将这些配置添加到pom.xml以在编译时进行编织。

raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
RequestError: TransportError(400, {u'line': 1, u'root_cause': [{u'reason': u'no [query] registered for [filtered]', u'type': u'parsing_exception', u'line': 1, u'col': 24}], u'type': u'parsing_exception', u'reason': u'no [query] registered for [filtered]', u'col': 24})

参考:http://aspects.jcabi.com/example-aspectj.html