package org.infinispan.tasks;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Callable;
/**
* An interface for deployed server tasks.
* In order to deploy a custom ServerTask, deploy a module containing a service that implements this interface.
*
* The task will be accessible by the name returned by {@link #getName()}
* Before the execution, {@link TaskContext} is injected into the task to provide
* {@link org.infinispan.Cache}, {@link org.infinispan.commons.marshall.Marshaller} and parameters.
*
*
* <p/>
* Author: Michal Szynkiewicz, michal.l.szynkiewicz@gmail.com
* Date: 1/19/16
* Time: 2:18 PM
*/
public interface ServerTask<V> extends Callable<V> {
/**
* Sets the task context
* Store the value in your task implementation to be able to access caches and other resources in the task
*
* @param taskContext task execution context
*/
void setTaskContext(TaskContext taskContext);
/**
* Provides a name for the task. This is the name by which the task will be executed.
* Make sure the name is unique for task.
*
* @return name of the server task
*/
String getName();
/**
* Provides info whether the task execution should be local - on one node or distributed - on all nodes.
*
* ONE_NODE execution is the default.
*
* @return {@link TaskExecutionMode#ONE_NODE} for single node execution, {@link TaskExecutionMode#ALL_NODES} for distributed execution,
*/
default TaskExecutionMode getExecutionMode() {
return TaskExecutionMode.ONE_NODE;
}
/**
* An optional role, for which the task is accessible.
* If the task executor has the role in the set, the task will be executed.
*
* If the role is not provided - all users can invoke the task
*
* @return a user role, for which the task can be executed
*/
default Optional<String> getAllowedRole() {
return Optional.empty();
}
/**
* The named parameters accepted by this task
*
* @return a java.util.Set of parameter names
*/
default Set<String> getParameters() {
return Collections.emptySet();
}
}