7

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 ミリ秒の遅延で 2 回再試行します。

4

4 に答える 4

7

まだ答えを探している人にとっては、Yegor の答えは古くなっています。彼が投稿したjcabi-maven-plugin バージョンは、私にとってはうまくいき0.8ませんでした。

数時間掘り下げた後、最後のバージョンを使用する必要があると述べているこれを見つけました。この時点で、2014 年 7 月0.9.2.

これが、 mvn jcabi:ajcを実行しているときに、リンクからエラーが発生し、ウィービングが機能しない理由に対する私の答えでした。

于 2015-03-05T12:02:29.707 に答える
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>
于 2013-09-23T20:35:20.197 に答える
0

残念ながら、これらの jcabi アスペクトには、プロジェクトで必要なアスペクトをコンパイルするためのカスタム pom.xml タスクが必要であることがわかりました。

したがって、NetBeans 内に jcabi jar をドロップして上記のコードをコンパイルするだけでは十分ではありません。

于 2013-09-19T14:42:31.880 に答える