I want to manually call for a retry on a method by using JCabi. Aspect oriented programming should make this easy but I can't figure it out.
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);
}
}
The only example available from jcabi is this one below which doesn't show how to throw an exception to force retry call:
Annotate your methods with @RetryOnFailure annotation and in case of exception in the method its execution will be repeated a few times:
public class Resource { @RetryOnFailure(attempts = 2, delay = 10, verbose = false) public String load(URL url) { return url.openConnection().getContent(); } }
In an exception occurs the method will retry two times, with a 10 msec delay between attempts.
For those of you out there still looking for an answer, Yegor's answer is now outdated. The jcabi-maven-plugin version 0.8
he posted wasn't working for me.
After some hours of digging I have found this which states that we should use the last version As of this time, July 2014 is 0.9.2
.
That was my answer for why when running mvn jcabi:ajc I was getting errors from the link and also the weaving not working.
Indeed, just using jcabi annotations is not enough. You should "weave" your source code or binaries. I would recommend to weave binaries, as explained here: http://aspects.jcabi.com/example-weaving.html. Add this plugin to your pom.xml
and you're done:
<plugin>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-maven-plugin</artifactId>
<version>0.8</version>
<executions>
<execution>
<goals>
<goal>ajc</goal>
</goals>
</execution>
</executions>
</plugin>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With