From a1f3e3d3c409722ae3997ba90c339502828b001b Mon Sep 17 00:00:00 2001 From: Simon Amport Date: Wed, 23 Aug 2023 10:12:44 +0200 Subject: [PATCH] Filter jobs by handlerType over REST --- .../service/api/CmmnRestResponseFactory.java | 1 + .../service/api/management/JobResponse.java | 10 +++++ .../api/management/JobResourceTest.java | 3 ++ .../rest/service/api/RestResponseFactory.java | 1 + .../DeadLetterJobCollectionResource.java | 9 +++++ .../HistoryJobCollectionResource.java | 9 +++++ .../api/management/JobCollectionResource.java | 9 +++++ .../service/api/management/JobResponse.java | 10 +++++ .../SuspendedJobCollectionResource.java | 9 +++++ .../TimerJobCollectionResource.java | 9 +++++ .../management/JobCollectionResourceTest.java | 38 +++++++++++++++++++ .../api/management/JobResourceTest.java | 4 ++ 12 files changed, 112 insertions(+) diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java index 44ba80e7f0d..6693757a594 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java @@ -1014,6 +1014,7 @@ public JobResponse createJobResponse(Job job, RestUrlBuilder urlBuilder, String[ response.setTenantId(job.getTenantId()); response.setElementId(job.getElementId()); response.setElementName(job.getElementName()); + response.setHandlerType(job.getJobHandlerType()); response.setUrl(urlBuilder.buildUrl(urlJobSegments, job.getId())); diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java index 9f8db947fbd..6ea27cd20d2 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java @@ -35,6 +35,7 @@ public class JobResponse { protected String planItemInstanceId; protected String elementId; protected String elementName; + protected String handlerType; protected Integer retries; protected String exceptionMessage; @JsonSerialize(using = DateToStringSerializer.class, as = Date.class) @@ -127,6 +128,15 @@ public void setElementName(String elementName) { this.elementName = elementName; } + public void setHandlerType(String handlerType) { + this.handlerType = handlerType; + } + + @ApiModelProperty(example = "cmmn-trigger-timer") + public String getHandlerType() { + return handlerType; + } + @ApiModelProperty(example = "3") public Integer getRetries() { return retries; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java index 22279d5f535..a56d9c4a609 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java @@ -69,6 +69,7 @@ public void testGetTimerJob() throws Exception { + "caseInstanceId: '" + timerJob.getScopeId() + "'," + "elementId: 'timerListener'," + "elementName: 'Timer listener'," + + "handlerType: 'cmmn-trigger-timer'," + "retries: " + timerJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(timerJob.getDuedate())) + "," + "tenantId: ''" @@ -109,6 +110,7 @@ public void testGetDeadLetterJob() throws Exception { + "caseInstanceId: '" + deadLetterJob.getScopeId() + "'," + "elementId: 'timerListener'," + "elementName: 'Timer listener'," + + "handlerType: 'cmmn-trigger-timer'," + "retries: " + deadLetterJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(deadLetterJob.getDuedate())) + "," + "tenantId: ''" @@ -167,6 +169,7 @@ public Void execute(CommandContext commandContext) { + "caseInstanceId: '" + lockedJob.getScopeId() + "'," + "elementId: 'timerListener'," + "elementName: 'Timer listener'," + + "handlerType: 'cmmn-trigger-timer'," + "retries: " + lockedJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(lockedJob.getDuedate())) + "," + "lockOwner: 'test'," diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java index 28192e12fc5..a0c693842a7 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java @@ -1160,6 +1160,7 @@ protected JobResponse createJobResponse(Job job, RestUrlBuilder urlBuilder, Stri response.setElementName(job.getElementName()); response.setRetries(job.getRetries()); response.setCreateTime(job.getCreateTime()); + response.setHandlerType(job.getJobHandlerType()); if (job instanceof JobInfoEntity) { JobInfoEntity jobInfoEntity = (JobInfoEntity) job; response.setLockOwner(jobInfoEntity.getLockOwner()); diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/DeadLetterJobCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/DeadLetterJobCollectionResource.java index 8f9d5eec965..a2a18efa416 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/DeadLetterJobCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/DeadLetterJobCollectionResource.java @@ -15,6 +15,7 @@ import static org.flowable.common.rest.api.PaginateListUtil.paginateList; +import java.util.Arrays; import java.util.Map; import org.flowable.common.engine.api.FlowableIllegalArgumentException; @@ -63,6 +64,8 @@ public class DeadLetterJobCollectionResource { @ApiImplicitParam(name = "processDefinitionId", dataType = "string", value = "Only return jobs with the given process definition id", paramType = "query"), @ApiImplicitParam(name = "elementId", dataType = "string", value = "Only return jobs with the given element id", paramType = "query"), @ApiImplicitParam(name = "elementName", dataType = "string", value = "Only return jobs with the given element name", paramType = "query"), + @ApiImplicitParam(name = "handlerType", dataType = "string", value = "Only return jobs with the given handler type", paramType = "query"), + @ApiImplicitParam(name = "handlerTypes", dataType = "string", value = "Only return jobs which have one of the given job handler type", paramType = "query"), @ApiImplicitParam(name = "executable", dataType = "boolean", value = "If true, only return jobs which are executable. If false, this parameter is ignored.", paramType = "query"), @ApiImplicitParam(name = "timersOnly", dataType = "boolean", value = "If true, only return jobs which are timers. If false, this parameter is ignored. Cannot be used together with 'messagesOnly'.", paramType = "query"), @ApiImplicitParam(name = "messagesOnly", dataType = "boolean", value = "If true, only return jobs which are messages. If false, this parameter is ignored. Cannot be used together with 'timersOnly'", paramType = "query"), @@ -108,6 +111,12 @@ public DataResponse getJobs(@ApiParam(hidden = true) @RequestParam if (allRequestParams.containsKey("elementName")) { query.elementName(allRequestParams.get("elementName")); } + if (allRequestParams.containsKey("handlerType")) { + query.handlerType(allRequestParams.get("handlerType")); + } + if (allRequestParams.containsKey("handlerTypes")) { + query.handlerTypes(Arrays.asList(allRequestParams.get("handlerTypes").split(","))); + } if (allRequestParams.containsKey("executable")) { query.executable(); } diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobCollectionResource.java index c1c8f5f56c9..200141fefb6 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobCollectionResource.java @@ -15,6 +15,7 @@ import static org.flowable.common.rest.api.PaginateListUtil.paginateList; +import java.util.Arrays; import java.util.Map; import org.flowable.common.rest.api.DataResponse; @@ -58,6 +59,8 @@ public class HistoryJobCollectionResource { @ApiImplicitParam(name = "withException", dataType = "boolean", value = "If true, only return jobs for which an exception occurred while executing it. If false, this parameter is ignored.", paramType = "query"), @ApiImplicitParam(name = "exceptionMessage", dataType = "string", value = "Only return jobs with the given exception message", paramType = "query"), @ApiImplicitParam(name = "scopeType", dataType = "string", value = "Only return jobs with the given scope type", paramType = "query"), + @ApiImplicitParam(name = "handlerType", dataType = "string", value = "Only return jobs with the given handler type", paramType = "query"), + @ApiImplicitParam(name = "handlerTypes", dataType = "string", value = "Only return jobs which have one of the given job handler type", paramType = "query"), @ApiImplicitParam(name = "tenantId", dataType = "string", value = "Only return jobs with the given tenantId.", paramType = "query"), @ApiImplicitParam(name = "tenantIdLike", dataType = "string", value = "Only return jobs with a tenantId like the given value.", paramType = "query"), @ApiImplicitParam(name = "withoutTenantId", dataType = "boolean", value = "If true, only returns jobs without a tenantId set. If false, the withoutTenantId parameter is ignored.", paramType = "query"), @@ -80,6 +83,12 @@ public DataResponse getHistoryJobs(@ApiParam(hidden = true) if (allRequestParams.containsKey("scopeType")) { query.jobId(allRequestParams.get("scopeType")); } + if (allRequestParams.containsKey("handlerType")) { + query.handlerType(allRequestParams.get("handlerType")); + } + if (allRequestParams.containsKey("handlerTypes")) { + query.handlerTypes(Arrays.asList(allRequestParams.get("handlerTypes").split(","))); + } if (allRequestParams.containsKey("withException")) { if (Boolean.valueOf(allRequestParams.get("withException"))) { query.withException(); diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobCollectionResource.java index 69eee9dcf93..86495c21a37 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobCollectionResource.java @@ -15,6 +15,7 @@ import static org.flowable.common.rest.api.PaginateListUtil.paginateList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -81,6 +82,8 @@ public class JobCollectionResource { @ApiImplicitParam(name = "processDefinitionId", dataType = "string", value = "Only return jobs with the given process definition id", paramType = "query"), @ApiImplicitParam(name = "elementId", dataType = "string", value = "Only return jobs with the given element id", paramType = "query"), @ApiImplicitParam(name = "elementName", dataType = "string", value = "Only return jobs with the given element name", paramType = "query"), + @ApiImplicitParam(name = "handlerType", dataType = "string", value = "Only return jobs with the given handler type", paramType = "query"), + @ApiImplicitParam(name = "handlerTypes", dataType = "string", value = "Only return jobs which have one of the given job handler type", paramType = "query"), @ApiImplicitParam(name = "timersOnly", dataType = "boolean", value = "If true, only return jobs which are timers. If false, this parameter is ignored. Cannot be used together with 'messagesOnly'.", paramType = "query"), @ApiImplicitParam(name = "messagesOnly", dataType = "boolean", value = "If true, only return jobs which are messages. If false, this parameter is ignored. Cannot be used together with 'timersOnly'", paramType = "query"), @ApiImplicitParam(name = "withException", dataType = "boolean", value = "If true, only return jobs for which an exception occurred while executing it. If false, this parameter is ignored.", paramType = "query"), @@ -125,6 +128,12 @@ public DataResponse getJobs(@ApiParam(hidden = true) @RequestParam if (allRequestParams.containsKey("elementName")) { query.elementName(allRequestParams.get("elementName")); } + if (allRequestParams.containsKey("handlerType")) { + query.handlerType(allRequestParams.get("handlerType")); + } + if (allRequestParams.containsKey("handlerTypes")) { + query.handlerTypes(Arrays.asList(allRequestParams.get("handlerTypes").split(","))); + } if (allRequestParams.containsKey("timersOnly")) { if (allRequestParams.containsKey("messagesOnly")) { throw new FlowableIllegalArgumentException("Only one of 'timersOnly' or 'messagesOnly' can be provided."); diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java index aa78d340821..c8ef45827df 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java @@ -37,6 +37,7 @@ public class JobResponse { protected String executionUrl; protected String elementId; protected String elementName; + protected String handlerType; protected Integer retries; protected String exceptionMessage; @JsonSerialize(using = DateToStringSerializer.class, as = Date.class) @@ -147,6 +148,15 @@ public void setElementName(String elementName) { this.elementName = elementName; } + @ApiModelProperty(example = "trigger-timer") + public String getHandlerType() { + return handlerType; + } + + public void setHandlerType(String handlerType) { + this.handlerType = handlerType; + } + @ApiModelProperty(example = "3") public Integer getRetries() { return retries; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/SuspendedJobCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/SuspendedJobCollectionResource.java index 77cf00f0bbe..2b6f22ae0e0 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/SuspendedJobCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/SuspendedJobCollectionResource.java @@ -15,6 +15,7 @@ import static org.flowable.common.rest.api.PaginateListUtil.paginateList; +import java.util.Arrays; import java.util.Map; import org.flowable.common.engine.api.FlowableIllegalArgumentException; @@ -64,6 +65,8 @@ public class SuspendedJobCollectionResource { @ApiImplicitParam(name = "processDefinitionId", dataType = "string", value = "Only return jobs with the given process definition id", paramType = "query"), @ApiImplicitParam(name = "elementId", dataType = "string", value = "Only return jobs with the given element id", paramType = "query"), @ApiImplicitParam(name = "elementName", dataType = "string", value = "Only return jobs with the given element name", paramType = "query"), + @ApiImplicitParam(name = "handlerType", dataType = "string", value = "Only return jobs with the given handler type", paramType = "query"), + @ApiImplicitParam(name = "handlerTypes", dataType = "string", value = "Only return jobs which have one of the given job handler type", paramType = "query"), @ApiImplicitParam(name = "executable", dataType = "boolean", value = "If true, only return jobs which are executable. If false, this parameter is ignored.", paramType = "query"), @ApiImplicitParam(name = "timersOnly", dataType = "boolean", value = "If true, only return jobs which are timers. If false, this parameter is ignored. Cannot be used together with 'messagesOnly'.", paramType = "query"), @ApiImplicitParam(name = "messagesOnly", dataType = "boolean", value = "If true, only return jobs which are messages. If false, this parameter is ignored. Cannot be used together with 'timersOnly'", paramType = "query"), @@ -109,6 +112,12 @@ public DataResponse getJobs(@ApiParam(hidden = true) @RequestParam if (allRequestParams.containsKey("elementName")) { query.elementName(allRequestParams.get("elementName")); } + if (allRequestParams.containsKey("handlerType")) { + query.handlerType(allRequestParams.get("handlerType")); + } + if (allRequestParams.containsKey("handlerTypes")) { + query.handlerTypes(Arrays.asList(allRequestParams.get("handlerTypes").split(","))); + } if (allRequestParams.containsKey("executable")) { query.executable(); } diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TimerJobCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TimerJobCollectionResource.java index 62e7cf28c88..2c571a1adc1 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TimerJobCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TimerJobCollectionResource.java @@ -15,6 +15,7 @@ import static org.flowable.common.rest.api.PaginateListUtil.paginateList; +import java.util.Arrays; import java.util.Map; import org.flowable.common.engine.api.FlowableIllegalArgumentException; @@ -64,6 +65,8 @@ public class TimerJobCollectionResource { @ApiImplicitParam(name = "processDefinitionId", dataType = "string", value = "Only return jobs with the given process definition id", paramType = "query"), @ApiImplicitParam(name = "elementId", dataType = "string", value = "Only return jobs with the given element id", paramType = "query"), @ApiImplicitParam(name = "elementName", dataType = "string", value = "Only return jobs with the given element name", paramType = "query"), + @ApiImplicitParam(name = "handlerType", dataType = "string", value = "Only return jobs with the given handler type", paramType = "query"), + @ApiImplicitParam(name = "handlerTypes", dataType = "string", value = "Only return jobs which have one of the given job handler type", paramType = "query"), @ApiImplicitParam(name = "executable", dataType = "boolean", value = "If true, only return jobs which are executable. If false, this parameter is ignored.", paramType = "query"), @ApiImplicitParam(name = "timersOnly", dataType = "boolean", value = "If true, only return jobs which are timers. If false, this parameter is ignored. Cannot be used together with 'messagesOnly'.", paramType = "query"), @ApiImplicitParam(name = "messagesOnly", dataType = "boolean", value = "If true, only return jobs which are messages. If false, this parameter is ignored. Cannot be used together with 'timersOnly'", paramType = "query"), @@ -106,6 +109,12 @@ public DataResponse getJobs(@ApiParam(hidden = true) @RequestParam if (allRequestParams.containsKey("elementId")) { query.elementId(allRequestParams.get("elementId")); } + if (allRequestParams.containsKey("handlerType")) { + query.handlerType(allRequestParams.get("handlerType")); + } + if (allRequestParams.containsKey("handlerTypes")) { + query.handlerTypes(Arrays.asList(allRequestParams.get("handlerTypes").split(","))); + } if (allRequestParams.containsKey("elementName")) { query.elementName(allRequestParams.get("elementName")); } diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java index 42b65086a14..9a86fbae0ec 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java @@ -154,6 +154,18 @@ public void testGetJobs() throws Exception { url = RestUrls.createRelativeResourceUrl(RestUrls.URL_TIMER_JOB_COLLECTION) + "?withoutScopeId=true"; assertResultsPresentInDataResponse(url, timerJob.getId()); + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_TIMER_JOB_COLLECTION) + "?handlerType=trigger-timer"; + assertResultsPresentInDataResponse(url, timerJob.getId()); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_TIMER_JOB_COLLECTION) + "?handlerType=unknown-type"; + assertResultsPresentInDataResponse(url); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_TIMER_JOB_COLLECTION) + "?handlerTypes=unknown-type,trigger-timer"; + assertResultsPresentInDataResponse(url, timerJob.getId()); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_TIMER_JOB_COLLECTION) + "?handlerTypes=unknown-type"; + assertResultsPresentInDataResponse(url); + Job timerJob2 = managementService.createTimerJobQuery().processInstanceId(processInstance.getId()).timers().singleResult(); for (int i = 0; i < timerJob2.getRetries(); i++) { // Force execution of job until retries are exhausted @@ -301,6 +313,32 @@ public void testGetJobs() throws Exception { url = RestUrls.createRelativeResourceUrl(RestUrls.URL_JOB_COLLECTION) + "?tenantIdLike=anotherTenant"; assertResultsPresentInDataResponse(url); + // Handler type(s) + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_JOB_COLLECTION) + "?handlerType=async-continuation"; + assertResultsPresentInDataResponse(url, asyncJob.getId()); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_JOB_COLLECTION) + "?handlerType=unknown-type"; + assertResultsPresentInDataResponse(url); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_DEADLETTER_JOB_COLLECTION) + "?handlerType=trigger-timer"; + assertResultsPresentInDataResponse(url, timerJob.getId()); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_DEADLETTER_JOB_COLLECTION) + "?handlerType=unknown-type"; + assertResultsPresentInDataResponse(url); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_JOB_COLLECTION) + "?handlerTypes=unknown-type,async-continuation"; + assertResultsPresentInDataResponse(url, asyncJob.getId()); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_JOB_COLLECTION) + "?handlerTypes=unknown-type"; + assertResultsPresentInDataResponse(url); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_DEADLETTER_JOB_COLLECTION) + "?handlerTypes=unknown-type,trigger-timer"; + assertResultsPresentInDataResponse(url, timerJob.getId()); + + url = RestUrls.createRelativeResourceUrl(RestUrls.URL_DEADLETTER_JOB_COLLECTION) + "?handlerTypes=unknown-type"; + assertResultsPresentInDataResponse(url); + + } @Test public void getUnexistingDeadLetterJob() throws Exception { diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java index 4a7dca04d70..e6e150defac 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java @@ -79,6 +79,7 @@ public void testGetTimerJob() throws Exception { + "processInstanceId: '" + timerJob.getProcessInstanceId() + "'," + "elementId: 'escalationTimer'," + "elementName: 'Escalation'," + + "handlerType: 'trigger-timer'," + "retries: " + timerJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(timerJob.getDuedate())) + "," + "tenantId: ''" @@ -134,6 +135,7 @@ public void testGetSuspendedJob() throws Exception { + "processInstanceId: '" + suspendedJob.getProcessInstanceId() + "'," + "elementId: 'escalationTimer'," + "elementName: 'Escalation'," + + "handlerType: 'trigger-timer'," + "retries: " + suspendedJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(suspendedJob.getDuedate())) + "," + "tenantId: ''" @@ -189,6 +191,7 @@ public void testGetDeadLetterJob() throws Exception { + "processInstanceId: '" + deadLetterJob.getProcessInstanceId() + "'," + "elementId: 'escalationTimer'," + "elementName: 'Escalation'," + + "handlerType: 'trigger-timer'," + "retries: " + deadLetterJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(deadLetterJob.getDuedate())) + "," + "tenantId: ''" @@ -262,6 +265,7 @@ public Void execute(CommandContext commandContext) { + "processInstanceId: '" + lockedJob.getProcessInstanceId() + "'," + "elementId: 'escalationTimer'," + "elementName: 'Escalation'," + + "handlerType: 'trigger-timer'," + "retries: " + lockedJob.getRetries() + "," + "dueDate: " + new TextNode(getISODateStringWithTZ(lockedJob.getDuedate())) + "," + "lockOwner: 'test',"