TSK-972 - comments from Holger

This commit is contained in:
BerndBreier 2019-12-12 14:39:19 +01:00 committed by Holger Hagen
parent d060a63a23
commit 8bcd37870c
10 changed files with 45 additions and 43 deletions

View File

@ -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();
}

View File

@ -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());

View File

@ -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;
}
}

View File

@ -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));

View File

@ -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()) {

View File

@ -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);
}

View File

@ -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 {

View File

@ -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 {

View File

@ -1,2 +0,0 @@
acceptance.taskrouting.TestTaskRouterForDomainA
acceptance.taskrouting.TestTaskRouterForDomainB

View File

@ -0,0 +1,2 @@
acceptance.taskrouting.TestTaskRoutingProviderForDomainA
acceptance.taskrouting.TestTaskRoutingProviderForDomainB