diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java index 60090b74d..af39a662a 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java @@ -330,15 +330,11 @@ public interface TaskService { * * @param taskQuery the task query. * @return the task that got selected and claimed - * @throws TaskNotFoundException if the task with taskId was not found - * @throws InvalidStateException if the state of the task with taskId is not READY - * @throws InvalidOwnerException if the task with taskId is claimed by someone else - * @throws NotAuthorizedException if the current user has no read permission for the - * workbasket the task is in + * @throws InvalidOwnerException if the task is claimed by someone else + * @throws NotAuthorizedException if the current user has no read permission for the workbasket + * the task is in */ - Task selectAndClaim(TaskQuery taskQuery) - throws TaskNotFoundException, NotAuthorizedException, InvalidStateException, - InvalidOwnerException; + Task selectAndClaim(TaskQuery taskQuery) throws NotAuthorizedException, InvalidOwnerException; /** * Deletes a list of tasks. diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java index 4381d8cbd..f90afde63 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java @@ -1110,6 +1110,8 @@ public class TaskQueryImpl implements TaskQuery { } } + // optimized query for db2 can't be used for now in case of selectAndClaim because of temporary + // tables and the "for update" clause clashing in db2 public String getLinkToMapperScript() { if (DB.DB2.dbProductId.equals(getDatabaseId()) && !selectAndClaim) { return LINK_TO_MAPPER_DB2; diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java index 985fd2b07..442074ec6 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java @@ -479,8 +479,7 @@ public class TaskServiceImpl implements TaskService { @Override public Task selectAndClaim(TaskQuery taskQuery) - throws TaskNotFoundException, NotAuthorizedException, InvalidStateException, - InvalidOwnerException { + throws NotAuthorizedException, InvalidOwnerException { if (LOGGER.isDebugEnabled()) { LOGGER.debug("entry to selectAndClaim(taskQuery = {})", taskQuery); @@ -502,6 +501,8 @@ public class TaskServiceImpl implements TaskService { return claim(taskSummary.getId()); + } catch (InvalidStateException | TaskNotFoundException e) { + throw new SystemException("Caught exception ", e); } finally { LOGGER.debug("exit from selectAndClaim()"); taskanaEngine.returnConnection(); diff --git a/lib/taskana-core/src/test/java/acceptance/task/SelectAndClaimTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/SelectAndClaimTaskAccTest.java index 01324d32a..9f065d506 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/SelectAndClaimTaskAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/SelectAndClaimTaskAccTest.java @@ -50,14 +50,14 @@ class SelectAndClaimTaskAccTest extends AbstractAccTest { threads[i].join(); } - assertThat(selectedAndClaimedTasks.stream().map(Task::getId)) + assertThat(selectedAndClaimedTasks).extracting(Task::getId) .containsExactlyInAnyOrder( "TKI:000000000000000000000000000000000003", "TKI:000000000000000000000000000000000004", "TKI:000000000000000000000000000000000005", "TKI:000000000000000000000000000000000006"); - assertThat(selectedAndClaimedTasks.stream().map(Task::getOwner)) + assertThat(selectedAndClaimedTasks).extracting(Task::getOwner) .containsExactlyInAnyOrder("admin", "taskadmin", "teamlead-1", "teamlead-2"); } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java index 116d4c5e7..d72909593 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/task/rest/TaskController.java @@ -439,7 +439,7 @@ public class TaskController extends AbstractPagingController { params.remove(EXTERNAL_ID); } - for (int i = 1; i < 17; i++) { + for (int i = 1; i <= 16; i++) { if (params.containsKey(CUSTOM + i)) { String[] customValues = extractCommaSeparatedFields(params.get(CUSTOM + i)); taskQuery.customAttributeIn(String.valueOf(i), customValues);