TSK-972 - comments from Holger
This commit is contained in:
parent
d060a63a23
commit
8bcd37870c
|
@ -6,7 +6,7 @@ import org.apache.ibatis.session.SqlSession;
|
|||
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.history.HistoryEventProducer;
|
||||
import pro.taskana.taskrouting.TaskRoutingProducer;
|
||||
import pro.taskana.taskrouting.TaskRoutingManager;
|
||||
|
||||
/**
|
||||
* FOR INTERNAL USE ONLY.
|
||||
|
@ -75,6 +75,6 @@ public interface InternalTaskanaEngine {
|
|||
*
|
||||
* @return the TaskRoutingProducer instance.
|
||||
*/
|
||||
TaskRoutingProducer getTaskRoutingProducer();
|
||||
TaskRoutingManager getTaskRoutingManager();
|
||||
|
||||
}
|
||||
|
|
|
@ -193,7 +193,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
} else if (task.getWorkbasketKey() != null) {
|
||||
workbasket = workbasketService.getWorkbasket(task.getWorkbasketKey(), task.getDomain());
|
||||
} else {
|
||||
String workbasketId = taskanaEngine.getTaskRoutingProducer().routeToWorkbasketId(task);
|
||||
String workbasketId = taskanaEngine.getTaskRoutingManager().determineWorkbasketId(task);
|
||||
if (workbasketId != null) {
|
||||
workbasket = workbasketService.getWorkbasket(workbasketId);
|
||||
task.setWorkbasketSummary(workbasket.asSummary());
|
||||
|
|
|
@ -49,7 +49,7 @@ import pro.taskana.mappings.TaskMonitorMapper;
|
|||
import pro.taskana.mappings.WorkbasketAccessMapper;
|
||||
import pro.taskana.mappings.WorkbasketMapper;
|
||||
import pro.taskana.security.CurrentUserContext;
|
||||
import pro.taskana.taskrouting.TaskRoutingProducer;
|
||||
import pro.taskana.taskrouting.TaskRoutingManager;
|
||||
|
||||
/**
|
||||
* This is the implementation of TaskanaEngine.
|
||||
|
@ -65,7 +65,7 @@ public class TaskanaEngineImpl implements TaskanaEngine {
|
|||
protected ConnectionManagementMode mode = ConnectionManagementMode.PARTICIPATE;
|
||||
protected java.sql.Connection connection = null;
|
||||
private HistoryEventProducer historyEventProducer;
|
||||
private TaskRoutingProducer taskRoutingProducer;
|
||||
private TaskRoutingManager taskRoutingManager;
|
||||
private InternalTaskanaEngineImpl internalTaskanaEngineImpl;
|
||||
|
||||
protected TaskanaEngineImpl(TaskanaEngineConfiguration taskanaEngineConfiguration) {
|
||||
|
@ -73,7 +73,7 @@ public class TaskanaEngineImpl implements TaskanaEngine {
|
|||
createTransactionFactory(taskanaEngineConfiguration.getUseManagedTransactions());
|
||||
this.sessionManager = createSqlSessionManager();
|
||||
historyEventProducer = HistoryEventProducer.getInstance(taskanaEngineConfiguration);
|
||||
taskRoutingProducer = TaskRoutingProducer.getInstance(this);
|
||||
taskRoutingManager = TaskRoutingManager.getInstance(this);
|
||||
this.internalTaskanaEngineImpl = new InternalTaskanaEngineImpl();
|
||||
}
|
||||
|
||||
|
@ -389,8 +389,8 @@ public class TaskanaEngineImpl implements TaskanaEngine {
|
|||
}
|
||||
|
||||
@Override
|
||||
public TaskRoutingProducer getTaskRoutingProducer() {
|
||||
return taskRoutingProducer;
|
||||
public TaskRoutingManager getTaskRoutingManager() {
|
||||
return taskRoutingManager;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ public class WorkbasketAccessItemQueryImpl implements WorkbasketAccessItemQuery
|
|||
public List<WorkbasketAccessItem> list() {
|
||||
LOGGER.debug("entry to list(), this = {}", this);
|
||||
List<WorkbasketAccessItem> result = taskanaEngine.openAndReturnConnection(
|
||||
() -> new ArrayList<WorkbasketAccessItem>(taskanaEngine.getSqlSession().selectList(LINK_TO_MAPPER, this)));
|
||||
() -> new ArrayList<>(taskanaEngine.getSqlSession().selectList(LINK_TO_MAPPER, this)));
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", result.size(),
|
||||
LoggerUtils.listToString(result));
|
||||
|
|
|
@ -12,37 +12,37 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
import pro.taskana.Task;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.taskrouting.api.TaskRouter;
|
||||
import pro.taskana.taskrouting.api.TaskRoutingProvider;
|
||||
|
||||
/**
|
||||
* Loads TaskRouter SPI implementation(s) and passes requests route tasks to workbaskets to the router(s).
|
||||
* Loads TaskRoutingProvider SPI implementation(s) and passes requests to determine workbasketids to them.
|
||||
*/
|
||||
public final class TaskRoutingProducer {
|
||||
public final class TaskRoutingManager {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(TaskRoutingProducer.class);
|
||||
private static TaskRoutingProducer singleton;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(TaskRoutingManager.class);
|
||||
private static TaskRoutingManager singleton;
|
||||
private static boolean enabled = false;
|
||||
private ServiceLoader<TaskRouter> serviceLoader;
|
||||
private static List<TaskRouter> theTaskRouters = new ArrayList<>();
|
||||
private ServiceLoader<TaskRoutingProvider> serviceLoader;
|
||||
private static List<TaskRoutingProvider> theTaskRoutingProviders = new ArrayList<>();
|
||||
|
||||
private TaskRoutingProducer(TaskanaEngine taskanaEngine) {
|
||||
serviceLoader = ServiceLoader.load(TaskRouter.class);
|
||||
for (TaskRouter router : serviceLoader) {
|
||||
private TaskRoutingManager(TaskanaEngine taskanaEngine) {
|
||||
serviceLoader = ServiceLoader.load(TaskRoutingProvider.class);
|
||||
for (TaskRoutingProvider router : serviceLoader) {
|
||||
router.initialize(taskanaEngine);
|
||||
theTaskRouters.add(router);
|
||||
theTaskRoutingProviders.add(router);
|
||||
LOGGER.info("Registered TaskRouter provider: {}", router.getClass().getName());
|
||||
}
|
||||
|
||||
if (theTaskRouters.isEmpty()) {
|
||||
if (theTaskRoutingProviders.isEmpty()) {
|
||||
LOGGER.info("No TaskRouter provider found. Running without Task Routing.");
|
||||
} else {
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized TaskRoutingProducer getInstance(TaskanaEngine taskanaEngine) {
|
||||
public static synchronized TaskRoutingManager getInstance(TaskanaEngine taskanaEngine) {
|
||||
if (singleton == null) {
|
||||
singleton = new TaskRoutingProducer(taskanaEngine);
|
||||
singleton = new TaskRoutingManager(taskanaEngine);
|
||||
}
|
||||
return singleton;
|
||||
}
|
||||
|
@ -52,20 +52,22 @@ public final class TaskRoutingProducer {
|
|||
}
|
||||
|
||||
/**
|
||||
* routes tasks to Workbaskets.
|
||||
* The task that is to be routed is passed to all registered TaskRouters. If they return no or more than one
|
||||
* workbasketId, null is returned, otherwise we return the workbasketId that was returned from the TaskRouters.
|
||||
* Determines a workbasket id for a given task.
|
||||
* Algorithm: The task that needs a workbasket id is passed to all registered TaskRoutingProviders.
|
||||
* If they return no or more than one workbasketId, null is returned, otherwise we return
|
||||
* the workbasketId that was returned from the TaskRoutingProviders.
|
||||
*
|
||||
* @param task the task for which a workbasketId is to be determined.
|
||||
* @return the id of the workbasket in which the task is to be created.
|
||||
*/
|
||||
public String routeToWorkbasketId(Task task) {
|
||||
public String determineWorkbasketId(Task task) {
|
||||
LOGGER.debug("entry to routeToWorkbasket. TaskRouterr is enabled {}, task = {}", isTaskRoutingEnabled(), task);
|
||||
String workbasketId = null;
|
||||
if (isTaskRoutingEnabled()) {
|
||||
// route to all task routers
|
||||
// route to all TaskRoutingProviders
|
||||
// collect in a set to see whether different workbasket ids are returned
|
||||
Set<String> workbasketIds = theTaskRouters.stream()
|
||||
.map(rtr -> rtr.routeToWorkbasketId(task))
|
||||
Set<String> workbasketIds = theTaskRoutingProviders.stream()
|
||||
.map(rtr -> rtr.determineWorkbasketId(task))
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
if (workbasketIds.isEmpty()) {
|
|
@ -4,15 +4,15 @@ import pro.taskana.Task;
|
|||
import pro.taskana.TaskanaEngine;
|
||||
|
||||
/**
|
||||
* Interface for TASKANA TaskRouter SPI.
|
||||
* Interface for TASKANA TaskRoutingProvider SPI.
|
||||
*/
|
||||
public interface TaskRouter {
|
||||
public interface TaskRoutingProvider {
|
||||
|
||||
/**
|
||||
* Initialize TaskRouter service.
|
||||
* Initialize TaskRoutingProvider service.
|
||||
*
|
||||
* @param taskanaEngine
|
||||
* {@link TaskanaEngine} The Taskana engine for needed initialization.
|
||||
* {@link TaskanaEngine} The Taskana engine needed for initialization.
|
||||
*/
|
||||
void initialize(TaskanaEngine taskanaEngine);
|
||||
|
||||
|
@ -23,6 +23,6 @@ public interface TaskRouter {
|
|||
* {@link Task} The task for which a workbasket must be determined.
|
||||
* @return the id of the workbasket in which the task is to be created.
|
||||
*/
|
||||
String routeToWorkbasketId(Task task);
|
||||
String determineWorkbasketId(Task task);
|
||||
|
||||
}
|
|
@ -2,12 +2,12 @@ package acceptance.taskrouting;
|
|||
|
||||
import pro.taskana.Task;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.taskrouting.api.TaskRouter;
|
||||
import pro.taskana.taskrouting.api.TaskRoutingProvider;
|
||||
|
||||
/**
|
||||
* This is a sample implementation of TaskRouter.
|
||||
*/
|
||||
public class TestTaskRouterForDomainA implements TaskRouter {
|
||||
public class TestTaskRoutingProviderForDomainA implements TaskRoutingProvider {
|
||||
|
||||
TaskanaEngine theEngine;
|
||||
|
||||
|
@ -17,7 +17,7 @@ public class TestTaskRouterForDomainA implements TaskRouter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String routeToWorkbasketId(Task task) {
|
||||
public String determineWorkbasketId(Task task) {
|
||||
if ("DOMAIN_A".equals(task.getDomain())) {
|
||||
return "WBI:100000000000000000000000000000000001";
|
||||
} else {
|
|
@ -2,12 +2,12 @@ package acceptance.taskrouting;
|
|||
|
||||
import pro.taskana.Task;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.taskrouting.api.TaskRouter;
|
||||
import pro.taskana.taskrouting.api.TaskRoutingProvider;
|
||||
|
||||
/**
|
||||
* This is a sample implementation of TaskRouter.
|
||||
*/
|
||||
public class TestTaskRouterForDomainB implements TaskRouter {
|
||||
public class TestTaskRoutingProviderForDomainB implements TaskRoutingProvider {
|
||||
|
||||
TaskanaEngine theEngine;
|
||||
|
||||
|
@ -17,7 +17,7 @@ public class TestTaskRouterForDomainB implements TaskRouter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String routeToWorkbasketId(Task task) {
|
||||
public String determineWorkbasketId(Task task) {
|
||||
if ("DOMAIN_B".equals(task.getDomain())) {
|
||||
return "WBI:100000000000000000000000000000000011";
|
||||
} else {
|
|
@ -1,2 +0,0 @@
|
|||
acceptance.taskrouting.TestTaskRouterForDomainA
|
||||
acceptance.taskrouting.TestTaskRouterForDomainB
|
|
@ -0,0 +1,2 @@
|
|||
acceptance.taskrouting.TestTaskRoutingProviderForDomainA
|
||||
acceptance.taskrouting.TestTaskRoutingProviderForDomainB
|
Loading…
Reference in New Issue