package org.infinispan.server.infinispan.task;
import java.util.concurrent.CompletableFuture;
import org.infinispan.Cache;
import org.infinispan.tasks.TaskContext;
/**
* Author: Michal Szynkiewicz, michal.l.szynkiewicz@gmail.com
* Date: 1/28/16
* Time: 9:36 AM
*/
public class LocalServerTaskRunner implements ServerTaskRunner {
@Override
public <T> CompletableFuture<T> execute(String taskName, TaskContext context) {
ServerTaskWrapper<T> task = getRegistry(context).<T>getTask(taskName);
try {
task.inject(context);
return CompletableFuture.completedFuture(task.run());
} catch (Exception e) {
CompletableFuture<T> finishedWithException = new CompletableFuture<>();
finishedWithException.completeExceptionally(e);
return finishedWithException;
}
}
private ServerTaskRegistry getRegistry(TaskContext context) {
Cache<?, ?> cache = context.getCache().get();
return cache.getCacheManager().getGlobalComponentRegistry().getComponent(ServerTaskRegistry.class);
}
}