This library helps you to make full use of all resources in a machine where they are not fully used. For example, if a machine hits 30% CPU usage and each request hits the database for 3 different queries, you could execute the queries in parallel, achieve (i.e.) 90% CPU usage and cut down your request time (i.e.) by 1/3.
This library might help even in situations where the CPU (or database connections, or any other managed resource) reaches 100% usage since it breaks sync tasks into multiple pieces.
watcher.updateEnrollmentsIfFinished();
result.include("subscription", enrollments.lastValidSubscription(loggedUser));
result.include("enrollments", enrollments.getCurrentMonth(loggedUser));
async.execute(() -> watcher.updateEnrollmentsIfFinished());
async.include("subscription", () -> enrollments.lastValidSubscription(loggedUser), Subscription.class);
async.include("enrollments", () -> enrollments.getCurrentMonth(loggedUser), List.class);
async.execute(new Runnable() {
public void run() {
watcher.updateEnrollmentsIfFinished();
}
});
async.include("subscription", new Callable<Subscription>() {
public Subscription call() throws Exception {
return enrollments.lastValidSubscription(loggedUser);
}
});
async.include("enrollments", new Callable<List<Enrollment>>() {
public List<Enrollment> call() throws Exception {
return enrollments.getCurrentMonth(loggedUser);
}
});
To configure the pool size (default 10) override your AsyncConfig class:
@ApplicationScoped @Component public class MyConfig extends AsyncConfig {
public int getPoolSize() {
return 100;
}
}
Hibernate is supported by default using the OpenSessionInView pattern. If you want to optimize your code and not allow any hibernate lazy loading, override the:
@Component
public class CustomSessionFutureCallback extends SessionFutureCallback {
SessionFutureCallback(FutureSessionProvider provider) {
super(provider);
}
protected boolean shouldAllowOpenSessionInView() {
return false;
}
}