FortEE is a Jakarta EE / Java EE fault-tolerance guard leveraging the Optional pattern. Its power lies in its simplicity. On methods returning Optional, a @Failsafe annotation can be placed. Any uncaught exceptional states are then converted into an Optional.empty(). Synchronous or asynchronous invocation is not enforced.
- Simple and fast
- Startup-time check
- Tiny in size
- Compatible with Jakarta EE 8, requires Java EE 7
<dependency>
<groupId>com.github.pscheidl</groupId>
<artifactId>fortee</artifactId>
<version>1.2.0</version>
</dependency>
compile 'com.github.pscheidl:fortee:1.2.0'
Release notes
- Released on 14th of June 2020
- The
@Semisafe
annotation ignored exceptions not only listed as a value of that annotation, but also exceptions directly specified in the mehod's definition, e.g.public Optional<String> doSomething() throws UnsupportedOperationException
will let theUnsupportedOperationException
through. - Test suite ran against WildFly 20.0.0-Final.
For more information, please visit FortEE wikipedia.
Guard against all checked and unchecked exceptions.
@Named
public class ServiceImplementation implements SomeService {
// Will return Optional.empty()
@Failsafe
public Optional<String> maybeFail(){
throw new RuntimeException("Failed on purpose");
}
}
Guard against all exceptions but the declared ones, or the ones listed in the @Semisafe
annotation..
@Named
public class ServiceImplementation implements SomeService {
// Will end with RuntimeException
@Semisafe
public Optional<String> maybeFail() throws RuntimeException {
throw new RuntimeException("Failed on purpose");
}
}
Alternatively, the exception to be let through can be specified inside the @Semisafe
annotation.
@Named
public class ServiceImplementation implements SomeService {
// Will end with RuntimeException
@Semisafe({RuntimeException.class})
public Optional<String> maybeFail(){
throw new RuntimeException("Failed on purpose");
}
}