diff --git a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-embedded/pom.xml b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-embedded/pom.xml
index 72383b29ad..d244649644 100644
--- a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-embedded/pom.xml
+++ b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-embedded/pom.xml
@@ -100,18 +100,39 @@
+
+ maven-resources-plugin
+
+
+ generate-resources
+
+ copy-resources
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+ ${common.test.resources.dir}
+
+ **/*.bpmn
+ **/*.sw.json
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+
+
-
-
- src/main/resources
-
-
- ${common.test.resources.dir}
-
- **/*.bpmn
- **/*.sw.json
-
-
-
diff --git a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-knative-eventing/pom.xml b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-knative-eventing/pom.xml
index 309ff02dcb..e105b0f06a 100644
--- a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-knative-eventing/pom.xml
+++ b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-knative-eventing/pom.xml
@@ -88,18 +88,39 @@
+
+ maven-resources-plugin
+
+
+ generate-resources
+
+ copy-resources
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+ ${common.test.resources.dir}
+
+ **/*.bpmn
+ **/*.sw.json
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+
+
-
-
- src/main/resources
-
-
- ${common.test.resources.dir}
-
- **/*.bpmn
- **/*.sw.json
-
-
-
diff --git a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-management/pom.xml b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-management/pom.xml
index ade7cbe17e..6cccd4aa7a 100644
--- a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-management/pom.xml
+++ b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-management/pom.xml
@@ -79,7 +79,6 @@
io.quarkus
quarkus-maven-plugin
- ${version.io.quarkus}
true
@@ -91,18 +90,39 @@
+
+ maven-resources-plugin
+
+
+ generate-resources
+
+ copy-resources
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+ ${common.test.resources.dir}
+
+ **/*.bpmn
+ **/*.sw.json
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+
+
-
-
- src/main/resources
-
-
- ${common.test.resources.dir}
-
- **/*.bpmn
- **/*.sw.json
-
-
-
diff --git a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-messaging/pom.xml b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-messaging/pom.xml
index 3ccd6395dd..fba2a2c5f1 100644
--- a/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-messaging/pom.xml
+++ b/apps-integration-tests/integration-tests-jobs-service/integration-tests-jobs-service-quarkus/integration-tests-jobs-service-quarkus-messaging/pom.xml
@@ -94,24 +94,10 @@
-
-
- src/main/resources
-
-
- ${common.test.resources.dir}
-
- **/*.bpmn
- **/*.sw.json
-
-
-
-
io.quarkus
quarkus-maven-plugin
- ${version.io.quarkus}
true
@@ -123,6 +109,39 @@
+
+ maven-resources-plugin
+
+
+ generate-resources
+
+ copy-resources
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+ ${common.test.resources.dir}
+
+ **/*.bpmn
+ **/*.sw.json
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+
+
+
+ ${project.basedir}/src/main/resources/shared
+
+
+
+
diff --git a/apps-integration-tests/integration-tests-trusty-service/integration-tests-trusty-service-springboot/pom.xml b/apps-integration-tests/integration-tests-trusty-service/integration-tests-trusty-service-springboot/pom.xml
index fd37954413..8ccdf7d69c 100644
--- a/apps-integration-tests/integration-tests-trusty-service/integration-tests-trusty-service-springboot/pom.xml
+++ b/apps-integration-tests/integration-tests-trusty-service/integration-tests-trusty-service-springboot/pom.xml
@@ -33,7 +33,7 @@
org.kie.kogito/integration-tests-trusty-service-springboot:${project.version}
**/KogitoApplication.java
- 3.3.1
+ 3.4.4
eclipse-temurin:17-jre
diff --git a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index 741c0d4e89..0317ec61c5 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -96,6 +96,7 @@ type ProcessInstance {
identity: String
createdBy: String
updatedBy: String
+ slaDueDate: DateTime
}
type ProcessInstanceError {
@@ -135,6 +136,7 @@ type NodeInstance {
exit: DateTime
definitionId: String!
nodeId: String!
+ slaDueDate: DateTime
}
enum MilestoneStatus {
diff --git a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
index 1e22527c59..ab9df6cadd 100644
--- a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
+++ b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
@@ -38,6 +38,8 @@ public class NodeInstance {
@JsonProperty("leaveTime")
private ZonedDateTime exit;
+ private ZonedDateTime slaDueDate;
+
@JsonProperty("nodeDefinitionId")
private String definitionId;
@@ -97,6 +99,14 @@ public void setName(String name) {
this.name = name;
}
+ public ZonedDateTime getSlaDueDate() {
+ return slaDueDate;
+ }
+
+ public void setSlaDueDate(ZonedDateTime slaDueDate) {
+ this.slaDueDate = slaDueDate;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -125,6 +135,7 @@ public String toString() {
", type='" + type + '\'' +
", enter=" + enter +
", exit=" + exit +
+ ", slaDueDate=" + slaDueDate +
", definitionId='" + definitionId + '\'' +
'}';
}
diff --git a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java
index d211ea198d..09441ca019 100644
--- a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java
+++ b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java
@@ -49,6 +49,7 @@ public class ProcessInstanceMeta {
@JsonProperty("updatedBy")
private String updatedBy;
private ZonedDateTime lastUpdate;
+ private ZonedDateTime slaDueDate;
public String getId() {
return id;
@@ -186,6 +187,14 @@ public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
+ public ZonedDateTime getSlaDueDate() {
+ return slaDueDate;
+ }
+
+ public void setSlaDueDate(ZonedDateTime slaDueDate) {
+ this.slaDueDate = slaDueDate;
+ }
+
@Override
public String toString() {
return "ProcessInstanceMeta{" +
diff --git a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
index d800dfd226..bb7c39a5bc 100644
--- a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
+++ b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
@@ -63,6 +63,7 @@ public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent> dat
nodeInstance.setNodeId(body.getNodeDefinitionId());
nodeInstance.setName(body.getNodeName());
nodeInstance.setType(body.getNodeType());
+ nodeInstance.setSlaDueDate(toZonedDateTime(body.getSlaDueDate()));
ZonedDateTime eventDate = toZonedDateTime(body.getEventDate());
switch (body.getEventType()) {
case EVENT_TYPE_ENTER:
diff --git a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
index b49036fb0c..a7be6d0ea3 100644
--- a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
+++ b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
@@ -63,6 +63,7 @@ public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent> dat
pi.setLastUpdate(toZonedDateTime(event.getTime()));
pi.setDefinition(definitions(event));
pi.setUpdatedBy(event.getData().getEventUser());
+ pi.setSlaDueDate(toZonedDateTime(event.getData().getSlaDueDate()));
LOGGER.debug("Value after merging: {}", pi);
return pi;
}
diff --git a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
index 194ad08caa..dd4b5f557c 100644
--- a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
+++ b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
@@ -42,6 +42,7 @@ public NodeInstance readFrom(ProtoStreamReader reader) throws IOException {
node.setExit(dateToZonedDateTime(reader.readDate("exit")));
node.setDefinitionId(reader.readString("definitionId"));
node.setNodeId(reader.readString("nodeId"));
+ node.setSlaDueDate(dateToZonedDateTime(reader.readDate("slaDueDate")));
return node;
}
@@ -54,6 +55,7 @@ public void writeTo(ProtoStreamWriter writer, NodeInstance node) throws IOExcept
writer.writeDate("exit", zonedDateTimeToDate(node.getExit()));
writer.writeString("definitionId", node.getDefinitionId());
writer.writeString("nodeId", node.getNodeId());
+ writer.writeDate("slaDueDate", zonedDateTimeToDate(node.getSlaDueDate()));
}
@Override
diff --git a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java
index ab391703aa..3e46ea2bf3 100644
--- a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java
+++ b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java
@@ -55,6 +55,7 @@ public class ProcessInstanceMarshaller extends AbstractMarshaller implements Mes
protected static final String MILESTONES = "milestones";
protected static final String CREATED_BY = "createdBy";
protected static final String UPDATED_BY = "updatedBy";
+ protected static final String SLA_DUE_DATE = "slaDueDate";
public ProcessInstanceMarshaller(ObjectMapper mapper) {
super(mapper);
@@ -84,6 +85,7 @@ public ProcessInstance readFrom(ProtoStreamReader reader) throws IOException {
pi.setVersion(reader.readString(VERSION));
pi.setCreatedBy(reader.readString(CREATED_BY));
pi.setUpdatedBy(reader.readString(UPDATED_BY));
+ pi.setSlaDueDate(dateToZonedDateTime(reader.readDate(SLA_DUE_DATE)));
return pi;
}
@@ -110,6 +112,7 @@ public void writeTo(ProtoStreamWriter writer, ProcessInstance pi) throws IOExcep
writer.writeString(VERSION, pi.getVersion());
writer.writeString(CREATED_BY, pi.getCreatedBy());
writer.writeString(UPDATED_BY, pi.getCreatedBy());
+ writer.writeDate(SLA_DUE_DATE, zonedDateTimeToDate(pi.getSlaDueDate()));
}
@Override
diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
index 347e6f9a7f..51c5bef912 100644
--- a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
+++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
@@ -43,6 +43,7 @@ public class NodeInstanceEntity extends AbstractEntity {
private String type;
private ZonedDateTime enter;
private ZonedDateTime exit;
+ private ZonedDateTime slaDueDate;
private String definitionId;
@ManyToOne(cascade = CascadeType.ALL, optional = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@@ -106,6 +107,14 @@ public void setExit(ZonedDateTime exit) {
this.exit = exit;
}
+ public ZonedDateTime getSlaDueDate() {
+ return slaDueDate;
+ }
+
+ public void setSlaDueDate(ZonedDateTime slaDueDate) {
+ this.slaDueDate = slaDueDate;
+ }
+
public ProcessInstanceEntity getProcessInstance() {
return processInstance;
}
diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
index 7046de267b..a3a0b0ceb3 100644
--- a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
+++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
@@ -68,6 +68,9 @@ public class ProcessInstanceEntity extends AbstractEntity {
private String createdBy;
private String updatedBy;
+
+ private ZonedDateTime slaDueDate;
+
@Convert(converter = JsonBinaryConverter.class)
@Column(columnDefinition = "jsonb")
private ObjectNode variables;
@@ -203,6 +206,14 @@ public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
+ public ZonedDateTime getSlaDueDate() {
+ return slaDueDate;
+ }
+
+ public void setSlaDueDate(ZonedDateTime slaDueDate) {
+ this.slaDueDate = slaDueDate;
+ }
+
public ObjectNode getVariables() {
return variables;
}
@@ -286,6 +297,7 @@ public String toString() {
", lastUpdate=" + lastUpdate +
", createdBy=" + createdBy +
", updatedBy=" + updatedBy +
+ ", slaDueDate=" + slaDueDate +
", variables=" + variables +
", nodes=" + nodes +
", milestones=" + milestones +
diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
index 8796f3204a..68e5d24844 100644
--- a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
+++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
@@ -179,6 +179,7 @@ private NodeInstanceEntity updateNode(NodeInstanceEntity nodeInstance, ProcessIn
nodeInstance.setNodeId(body.getNodeDefinitionId());
nodeInstance.setName(body.getNodeName());
nodeInstance.setType(body.getNodeType());
+ nodeInstance.setSlaDueDate(toZonedDateTime(body.getSlaDueDate()));
ZonedDateTime eventDate = toZonedDateTime(body.getEventDate());
switch (body.getEventType()) {
case EVENT_TYPE_ENTER:
@@ -219,6 +220,7 @@ private void indexState(ProcessInstanceEntity pi, ProcessInstanceStateEventBody
pi.setLastUpdate(toZonedDateTime(data.getEventDate()));
pi.setAddons(addons);
pi.setEndpoint(endpoint);
+ pi.setSlaDueDate(toZonedDateTime(data.getSlaDueDate()));
}
private void indexVariable(ProcessInstanceEntity pi, ProcessInstanceVariableEventBody data) {
diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
index b60f7ed300..f8f8c6674e 100644
--- a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
+++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
@@ -109,7 +109,7 @@ public void testProcessInstanceNodeEvent() {
.hasSize(1);
Assertions.assertThat(processInstance.getNodes().get(0))
- .hasNoNullFieldsOrPropertiesExcept("exit")
+ .hasNoNullFieldsOrPropertiesExcept("exit", "slaDueDate")
.hasFieldOrPropertyWithValue("name", "nodeName")
.hasFieldOrPropertyWithValue("type", "BoundaryEventNode")
.hasFieldOrPropertyWithValue("definitionId", nodeDefinitionId)
@@ -125,7 +125,7 @@ public void testProcessInstanceNodeEvent() {
.hasSize(1);
Assertions.assertThat(processInstance.getNodes().get(0))
- .hasNoNullFieldsOrProperties()
+ .hasNoNullFieldsOrPropertiesExcept("slaDueDate")
.hasFieldOrPropertyWithValue("name", "nodeName")
.hasFieldOrPropertyWithValue("type", "BoundaryEventNode")
.hasFieldOrPropertyWithValue("definitionId", nodeDefinitionId)
diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.6__add_sla_due_date_columns.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.6__add_sla_due_date_columns.sql
new file mode 100644
index 0000000000..fdd7838f41
--- /dev/null
+++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.6__add_sla_due_date_columns.sql
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ALTER TABLE processes ADD sla_due_date timestamp;
+ALTER TABLE nodes ADD sla_due_date timestamp;
\ No newline at end of file
diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
index 28cef62442..5a66e6f298 100644
--- a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
+++ b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
@@ -70,6 +70,8 @@ public class ProcessInstanceEntity {
String updatedBy;
+ Long slaDueDate;
+
public String getId() {
return id;
}
@@ -238,6 +240,14 @@ public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
+ public Long getSlaDueDate() {
+ return slaDueDate;
+ }
+
+ public void setSlaDueDate(Long slaDueDate) {
+ this.slaDueDate = slaDueDate;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -271,6 +281,8 @@ public static class NodeInstanceEntity {
String definitionId;
+ Long slaDueDate;
+
public String getId() {
return id;
}
@@ -327,6 +339,14 @@ public void setDefinitionId(String definitionId) {
this.definitionId = definitionId;
}
+ public Long getSlaDueDate() {
+ return slaDueDate;
+ }
+
+ public void setSlaDueDate(Long slaDueDate) {
+ this.slaDueDate = slaDueDate;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
index 16e1f13d3c..18e674d57e 100644
--- a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
+++ b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
@@ -77,6 +77,7 @@ public ProcessInstanceEntity mapToEntity(String key, ProcessInstance instance) {
entity.setVersion(instance.getVersion());
entity.setCreatedBy(instance.getCreatedBy());
entity.setUpdatedBy(instance.getUpdatedBy());
+ entity.setSlaDueDate(zonedDateTimeToInstant(instance.getSlaDueDate()));
return entity;
}
@@ -108,6 +109,7 @@ public ProcessInstance mapToModel(ProcessInstanceEntity entity) {
instance.setVersion(entity.getVersion());
instance.setCreatedBy(entity.getCreatedBy());
instance.setUpdatedBy(entity.getCreatedBy());
+ instance.setSlaDueDate(instantToZonedDateTime(entity.getSlaDueDate()));
return instance;
}
@@ -146,6 +148,7 @@ NodeInstance toNodeInstance(ProcessInstanceEntity.NodeInstanceEntity entity) {
instance.setEnter(instantToZonedDateTime(entity.getEnter()));
instance.setExit(instantToZonedDateTime(entity.getExit()));
instance.setDefinitionId(entity.getDefinitionId());
+ instance.setSlaDueDate(instantToZonedDateTime(entity.getSlaDueDate()));
return instance;
}
@@ -162,6 +165,7 @@ ProcessInstanceEntity.NodeInstanceEntity fromNodeInstance(NodeInstance instance)
entity.setEnter(zonedDateTimeToInstant(instance.getEnter()));
entity.setExit(zonedDateTimeToInstant(instance.getExit()));
entity.setDefinitionId(instance.getDefinitionId());
+ entity.setSlaDueDate(zonedDateTimeToInstant(instance.getSlaDueDate()));
return entity;
}
diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.6__add_sla_due_date_columns.sql b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.6__add_sla_due_date_columns.sql
new file mode 100644
index 0000000000..58b83a3266
--- /dev/null
+++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.6__add_sla_due_date_columns.sql
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ALTER TABLE IF exists processes ADD COLUMN IF NOT EXISTS sla_due_date timestamp;
+ALTER TABLE IF exists nodes ADD COLUMN IF NOT EXISTS sla_due_date timestamp;
\ No newline at end of file
diff --git a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
index 5c23eecefa..ed6d7c09ee 100644
--- a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
+++ b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
@@ -153,6 +153,7 @@ message ProcessInstance {
optional string createdBy = 20;
/* @Field(store = Store.YES) */
optional string updatedBy = 21;
+ optional int64 slaDueDate = 22;
}
/* @Indexed */
@@ -177,6 +178,7 @@ message NodeInstance {
optional string definitionId = 6;
/* @Field(store = Store.YES) */
optional string nodeId = 7;
+ optional int64 slaDueDate = 8;
}
/* @Indexed */
diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
index 697dcfd1e0..1f9b64d91d 100644
--- a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
+++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
@@ -130,7 +130,8 @@ public CompletableFuture getProcessInstanceDiagram(String serviceURL, Pr
if (processSvgService == null) {
return CompletableFuture.completedFuture(null);
} else {
- return CompletableFuture.supplyAsync(() -> processSvgService.getProcessInstanceSvg(processInstance.getProcessId(), processInstance.getId(), null).orElse(null), managedExecutor);
+ return CompletableFuture.supplyAsync(() -> processSvgService.getProcessInstanceSvg(processInstance.getProcessId(), processInstance.getId(), this.getAuthHeader()).orElse(null),
+ managedExecutor);
}
}
diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JacksonConfiguration.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JacksonConfiguration.java
index cfbbd024a5..f1603c1ef4 100644
--- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JacksonConfiguration.java
+++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JacksonConfiguration.java
@@ -20,7 +20,7 @@
import org.kie.kogito.jobs.DurationExpirationTime;
import org.kie.kogito.jobs.ExactExpirationTime;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.JobDescription;
import org.kie.kogito.jobs.service.api.serlialization.SerializationUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,8 +46,8 @@ public ObjectMapperCustomizer customizer() {
return objectMapper -> {
LOGGER.debug("Jackson customization initialized.");
SimpleModule kogitoCustomModule = new SimpleModule();
- kogitoCustomModule.addSerializer(ProcessInstanceJobDescription.class, new ProcessInstanceJobDescriptionSerializer());
- kogitoCustomModule.addDeserializer(ProcessInstanceJobDescription.class, new ProcessInstanceJobDescriptionDeserializer());
+ kogitoCustomModule.addSerializer(JobDescription.class, new JobDescriptionSerializer());
+ kogitoCustomModule.addDeserializer(JobDescription.class, new JobDescriptionDeserializer());
kogitoCustomModule.addSerializer(DurationExpirationTime.class, new DurationExpirationTimeSerializer());
kogitoCustomModule.addDeserializer(DurationExpirationTime.class, new DurationExpirationTimeDeserializer());
kogitoCustomModule.addSerializer(ExactExpirationTime.class, new ExactExpirationTimeSerializer());
diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JobDescriptionDeserializer.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JobDescriptionDeserializer.java
new file mode 100644
index 0000000000..f0a72db2b4
--- /dev/null
+++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JobDescriptionDeserializer.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.jobs.service.json;
+
+import java.io.IOException;
+
+import org.kie.kogito.jobs.ExpirationTime;
+import org.kie.kogito.jobs.JobDescription;
+import org.kie.kogito.jobs.descriptors.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.descriptors.ProcessInstanceJobDescriptionBuilder;
+import org.kie.kogito.jobs.descriptors.UserTaskInstanceJobDescription;
+import org.kie.kogito.jobs.descriptors.UserTaskInstanceJobDescriptionBuilder;
+
+import com.fasterxml.jackson.core.JacksonException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+
+import static java.util.Optional.ofNullable;
+
+public class JobDescriptionDeserializer extends StdDeserializer {
+
+ private static final long serialVersionUID = -8307549297456060422L;
+
+ public JobDescriptionDeserializer() {
+ super(ProcessInstanceJobDescription.class);
+ }
+
+ @Override
+ public JobDescription deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JacksonException {
+ try {
+ JsonNode node = jp.getCodec().readTree(jp);
+ String jobDescriptionType = node.get("@type").asText();
+ switch (jobDescriptionType) {
+ case "ProcessInstanceJobDescription": {
+ ProcessInstanceJobDescriptionBuilder builder = ProcessInstanceJobDescription.newProcessInstanceJobDescriptionBuilder();
+ ofNullable(node.get("id")).ifPresent(e -> builder.id(e.textValue()));
+ ofNullable(node.get("priority")).ifPresent(e -> builder.priority(e.asInt()));
+ String expirationTimeType = node.get("expirationTime").get("@type").asText();
+ builder.expirationTime((ExpirationTime) ctxt.readTreeAsValue(node.get("expirationTime"), Class.forName(expirationTimeType)));
+
+ ofNullable(node.get("timerId")).ifPresent(e -> builder.timerId(e.textValue()));
+ ofNullable(node.get("processInstanceId")).ifPresent(e -> builder.processInstanceId(e.textValue()));
+ ofNullable(node.get("rootProcessInstanceId")).ifPresent(e -> builder.rootProcessInstanceId(e.textValue()));
+ ofNullable(node.get("processId")).ifPresent(e -> builder.processId(e.textValue()));
+ ofNullable(node.get("rootProcessId")).ifPresent(e -> builder.rootProcessId(e.textValue()));
+ ofNullable(node.get("nodeInstanceId")).ifPresent(e -> builder.nodeInstanceId(e.textValue()));
+
+ return builder.build();
+ }
+ case "UserTaskInstanceJobDescription": {
+ UserTaskInstanceJobDescriptionBuilder builder = UserTaskInstanceJobDescription.newUserTaskInstanceJobDescriptionBuilder();
+ ofNullable(node.get("id")).ifPresent(e -> builder.id(e.textValue()));
+ ofNullable(node.get("priority")).ifPresent(e -> builder.priority(e.asInt()));
+ String expirationTimeType = node.get("expirationTime").get("@type").asText();
+ builder.expirationTime((ExpirationTime) ctxt.readTreeAsValue(node.get("expirationTime"), Class.forName(expirationTimeType)));
+
+ ofNullable(node.get("userTaskInstanceId")).ifPresent(e -> builder.userTaskInstanceId(e.textValue()));
+ return builder.build();
+ }
+ }
+ } catch (ClassNotFoundException e1) {
+ throw new IllegalArgumentException("expiration time class not found", e1);
+ }
+ return null;
+ }
+
+}
diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/ProcessInstanceJobDescriptionSerializer.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JobDescriptionSerializer.java
similarity index 50%
rename from jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/ProcessInstanceJobDescriptionSerializer.java
rename to jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JobDescriptionSerializer.java
index 379da2a0e5..22935e0e37 100644
--- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/ProcessInstanceJobDescriptionSerializer.java
+++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/JobDescriptionSerializer.java
@@ -20,32 +20,40 @@
import java.io.IOException;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.JobDescription;
+import org.kie.kogito.jobs.descriptors.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.descriptors.UserTaskInstanceJobDescription;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-public class ProcessInstanceJobDescriptionSerializer extends StdSerializer {
+public class JobDescriptionSerializer extends StdSerializer {
private static final long serialVersionUID = -8307549297456060422L;
- public ProcessInstanceJobDescriptionSerializer() {
- super(ProcessInstanceJobDescription.class);
+ public JobDescriptionSerializer() {
+ super(JobDescription.class);
}
@Override
- public void serialize(ProcessInstanceJobDescription value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
+ public void serialize(JobDescription value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeStartObject();
+ jgen.writeStringField("@type", value.getClass().getSimpleName());
jgen.writeStringField("id", value.id());
- jgen.writeStringField("timerId", value.timerId());
- jgen.writeObjectField("expirationTime", value.expirationTime());
jgen.writeNumberField("priority", value.priority());
- jgen.writeStringField("processInstanceId", value.processInstanceId());
- jgen.writeStringField("rootProcessInstanceId", value.rootProcessInstanceId());
- jgen.writeStringField("processId", value.processId());
- jgen.writeStringField("rootProcessId", value.rootProcessId());
- jgen.writeStringField("nodeInstanceId", value.nodeInstanceId());
+ jgen.writeObjectField("expirationTime", value.expirationTime());
+ if (value instanceof ProcessInstanceJobDescription jobDescription) {
+ jgen.writeStringField("timerId", jobDescription.timerId());
+ jgen.writeStringField("processInstanceId", jobDescription.processInstanceId());
+ jgen.writeStringField("rootProcessInstanceId", jobDescription.rootProcessInstanceId());
+ jgen.writeStringField("processId", jobDescription.processId());
+ jgen.writeStringField("rootProcessId", jobDescription.rootProcessId());
+ jgen.writeStringField("nodeInstanceId", jobDescription.nodeInstanceId());
+ jgen.writeEndObject();
+ } else if (value instanceof UserTaskInstanceJobDescription userTaskInstanceJobDescription) {
+ jgen.writeStringField("userTaskInstanceId", userTaskInstanceJobDescription.getUserTaskInstanceId());
+ }
jgen.writeEndObject();
}
diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/ProcessInstanceJobDescriptionDeserializer.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/ProcessInstanceJobDescriptionDeserializer.java
deleted file mode 100644
index 6ccfb99f47..0000000000
--- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/json/ProcessInstanceJobDescriptionDeserializer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.kie.kogito.jobs.service.json;
-
-import java.io.IOException;
-
-import org.kie.kogito.jobs.ExpirationTime;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
-import org.kie.kogito.jobs.ProcessInstanceJobDescriptionBuilder;
-
-import com.fasterxml.jackson.core.JacksonException;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
-
-import static java.util.Optional.ofNullable;
-
-public class ProcessInstanceJobDescriptionDeserializer extends StdDeserializer {
-
- private static final long serialVersionUID = -8307549297456060422L;
-
- public ProcessInstanceJobDescriptionDeserializer() {
- super(ProcessInstanceJobDescription.class);
- }
-
- @Override
- public ProcessInstanceJobDescription deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JacksonException {
- ProcessInstanceJobDescriptionBuilder builder = ProcessInstanceJobDescription.builder();
-
- JsonNode node = jp.getCodec().readTree(jp);
- ofNullable(node.get("id")).ifPresent(e -> builder.id(e.textValue()));
- ofNullable(node.get("timerId")).ifPresent(e -> builder.timerId(e.textValue()));
- ofNullable(node.get("priority")).ifPresent(e -> builder.priority(e.asInt()));
- ofNullable(node.get("processInstanceId")).ifPresent(e -> builder.processInstanceId(e.textValue()));
- ofNullable(node.get("rootProcessInstanceId")).ifPresent(e -> builder.rootProcessInstanceId(e.textValue()));
- ofNullable(node.get("processId")).ifPresent(e -> builder.processId(e.textValue()));
- ofNullable(node.get("rootProcessId")).ifPresent(e -> builder.rootProcessId(e.textValue()));
- ofNullable(node.get("nodeInstanceId")).ifPresent(e -> builder.nodeInstanceId(e.textValue()));
-
- String type = node.get("expirationTime").get("@type").asText();
- try {
- builder.expirationTime((ExpirationTime) ctxt.readTreeAsValue(node.get("expirationTime"), Class.forName(type)));
- } catch (ClassNotFoundException | IOException e1) {
- e1.printStackTrace();
- }
-
- return builder.build();
- }
-
-}
diff --git a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobExecutor.java b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobExecutor.java
index ead3bbf2a2..961e0485aa 100644
--- a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobExecutor.java
+++ b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobExecutor.java
@@ -19,9 +19,13 @@
package org.kie.kogito.jobs.embedded;
import java.util.Optional;
+import java.util.function.Supplier;
import org.kie.kogito.Application;
import org.kie.kogito.Model;
+import org.kie.kogito.jobs.JobDescription;
+import org.kie.kogito.jobs.descriptors.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.descriptors.UserTaskInstanceJobDescription;
import org.kie.kogito.jobs.service.api.Recipient;
import org.kie.kogito.jobs.service.exception.JobExecutionException;
import org.kie.kogito.jobs.service.executor.JobExecutor;
@@ -31,40 +35,81 @@
import org.kie.kogito.process.Process;
import org.kie.kogito.process.Processes;
import org.kie.kogito.services.jobs.impl.TriggerJobCommand;
+import org.kie.kogito.usertask.UserTaskInstance;
+import org.kie.kogito.usertask.UserTasks;
import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Alternative;
+import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
+import static org.kie.kogito.services.uow.UnitOfWorkExecutor.executeInUnitOfWork;
+
@ApplicationScoped
@Alternative
public class EmbeddedJobExecutor implements JobExecutor {
@Inject
- Processes processes;
+ Instance processes;
+
+ @Inject
+ Instance userTasks;
@Inject
Application application;
@Override
public Uni execute(JobDetails jobDetails) {
-
- String correlationId = jobDetails.getCorrelationId();
RecipientInstance recipientModel = (RecipientInstance) jobDetails.getRecipient();
InVMRecipient recipient = (InVMRecipient) recipientModel.getRecipient();
- String timerId = recipient.getPayload().getData().timerId();
- String processInstanceId = recipient.getPayload().getData().processInstanceId();
- Optional> process;
- try {
- process = processes.processByProcessInstanceId(processInstanceId);
- } catch (Exception ex) {
- return Uni.createFrom().failure(
- new JobExecutionException(jobDetails.getId(),
- "Unexpected error when executing Embedded request for job: " + jobDetails.getId() + ". " + ex.getMessage(),
- ex));
+ JobDescription jobDescription = recipient.getPayload().getData();
+ if (jobDescription instanceof ProcessInstanceJobDescription processInstanceJobDescription && processes.isResolvable()) {
+ return processJobDescription(jobDetails, processInstanceJobDescription);
+ } else if (jobDescription instanceof UserTaskInstanceJobDescription userTaskInstanceJobDescription && userTasks.isResolvable()) {
+ return processJobDescription(jobDetails, userTaskInstanceJobDescription);
}
+
+ return Uni.createFrom().item(
+ JobExecutionResponse.builder()
+ .code("401")
+ .jobId(jobDetails.getId())
+ .now()
+ .message("job cannot be processed")
+ .build());
+ }
+
+ private Uni processJobDescription(JobDetails jobDetails, UserTaskInstanceJobDescription userTaskInstanceJobDescription) {
+ Supplier execute = () -> executeInUnitOfWork(application.unitOfWorkManager(), () -> {
+ Optional userTaskInstance = userTasks.get().instances().findById(userTaskInstanceJobDescription.getUserTaskInstanceId());
+ if (userTaskInstance.isEmpty()) {
+ return null;
+ }
+ UserTaskInstance instance = userTaskInstance.get();
+ instance.trigger(userTaskInstanceJobDescription);
+ return null;
+ });
+
+ return Uni.createFrom().item(execute)
+ .onFailure()
+ .transform(
+ unexpected -> new JobExecutionException(jobDetails.getId(), "Unexpected error when executing Embedded request for job: " + jobDetails.getId() + ". " + unexpected.getMessage(),
+ unexpected))
+ .onItem()
+ .transform(res -> JobExecutionResponse.builder()
+ .message("Embedded job executed")
+ .code(String.valueOf(200))
+ .now()
+ .jobId(jobDetails.getId())
+ .build());
+
+ }
+
+ private Uni processJobDescription(JobDetails jobDetails, ProcessInstanceJobDescription processInstanceJobDescription) {
+ String timerId = processInstanceJobDescription.timerId();
+ String processInstanceId = processInstanceJobDescription.processInstanceId();
+ Optional> process = processes.get().processByProcessInstanceId(processInstanceId);
if (process.isEmpty()) {
return Uni.createFrom().item(
JobExecutionResponse.builder()
@@ -77,9 +122,13 @@ public Uni execute(JobDetails jobDetails) {
Integer limit = jobDetails.getRetries();
- TriggerJobCommand command = new TriggerJobCommand(processInstanceId, correlationId, timerId, limit, process.get(), application.unitOfWorkManager());
+ Supplier execute = () -> executeInUnitOfWork(application.unitOfWorkManager(), () -> {
+ TriggerJobCommand command = new TriggerJobCommand(processInstanceId, jobDetails.getCorrelationId(), timerId, limit, process.get(), application.unitOfWorkManager());
+ return command.execute();
+ });
- return Uni.createFrom().item(command::execute)
+ return Uni.createFrom()
+ .item(execute)
.onFailure()
.transform(
unexpected -> new JobExecutionException(jobDetails.getId(), "Unexpected error when executing Embedded request for job: " + jobDetails.getId() + ". " + unexpected.getMessage(),
diff --git a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
index 95b9b0d92e..84754c6dc2 100644
--- a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
+++ b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
@@ -20,9 +20,8 @@
import java.util.concurrent.ExecutionException;
+import org.kie.kogito.jobs.JobDescription;
import org.kie.kogito.jobs.JobsService;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
-import org.kie.kogito.jobs.ProcessJobDescription;
import org.kie.kogito.jobs.api.JobCallbackResourceDef;
import org.kie.kogito.jobs.service.adapter.JobDetailsAdapter;
import org.kie.kogito.jobs.service.api.Job;
@@ -54,13 +53,7 @@ public EmbeddedJobsService() {
}
@Override
- public String scheduleProcessJob(ProcessJobDescription description) {
- LOGGER.debug("ScheduleProcessJob: {} not supported", description);
- return null;
- }
-
- @Override
- public String scheduleProcessInstanceJob(ProcessInstanceJobDescription description) {
+ public String scheduleJob(JobDescription description) {
try {
Job job = Job.builder()
.id(description.id())
diff --git a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/InVMPayloadData.java b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/InVMPayloadData.java
index cb49a135b6..3a9cdf9286 100644
--- a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/InVMPayloadData.java
+++ b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/InVMPayloadData.java
@@ -18,31 +18,31 @@
*/
package org.kie.kogito.jobs.embedded;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.JobDescription;
import org.kie.kogito.jobs.service.api.PayloadData;
-public class InVMPayloadData extends PayloadData {
+public class InVMPayloadData extends PayloadData {
- private ProcessInstanceJobDescription jobDescription;
+ private JobDescription jobDescription;
public InVMPayloadData() {
// do nothing
}
- public void setJobDescription(ProcessInstanceJobDescription jobDescription) {
+ public void setJobDescription(JobDescription jobDescription) {
this.jobDescription = jobDescription;
}
- public ProcessInstanceJobDescription getJobDescription() {
+ public JobDescription getJobDescription() {
return jobDescription;
}
@Override
- public ProcessInstanceJobDescription getData() {
+ public JobDescription getData() {
return jobDescription;
}
- public InVMPayloadData(ProcessInstanceJobDescription data) {
+ public InVMPayloadData(JobDescription data) {
this.jobDescription = data;
}
diff --git a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/JobInVMEventPublisher.java b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/JobInVMEventPublisher.java
index dae4ac4ecf..78434dc841 100644
--- a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/JobInVMEventPublisher.java
+++ b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/JobInVMEventPublisher.java
@@ -25,7 +25,8 @@
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.kie.kogito.event.EventPublisher;
import org.kie.kogito.event.job.JobInstanceDataEvent;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.JobDescription;
+import org.kie.kogito.jobs.descriptors.ProcessInstanceJobDescription;
import org.kie.kogito.jobs.service.adapter.ScheduledJobAdapter;
import org.kie.kogito.jobs.service.api.Recipient;
import org.kie.kogito.jobs.service.model.JobDetails;
@@ -93,13 +94,15 @@ public void observe(@ObservesAsync EmbeddedJobServiceEvent serviceEvent) {
try {
ScheduledJob scheduledJob = ScheduledJobAdapter.of(jobDetails);
Recipient recipient = jobDetails.getRecipient().getRecipient();
- ProcessInstanceJobDescription jobDescription = recipient.getPayload().getJobDescription();
-
- scheduledJob.setProcessInstanceId(jobDescription.processInstanceId());
- scheduledJob.setProcessId(jobDescription.processId());
- scheduledJob.setRootProcessInstanceId(jobDescription.rootProcessInstanceId());
- scheduledJob.setRootProcessId(jobDescription.rootProcessId());
- scheduledJob.setNodeInstanceId(jobDescription.nodeInstanceId());
+ JobDescription jobDescription = recipient.getPayload().getJobDescription();
+
+ if (jobDescription instanceof ProcessInstanceJobDescription processInstanceJobDescription) {
+ scheduledJob.setProcessInstanceId(processInstanceJobDescription.processInstanceId());
+ scheduledJob.setProcessId(processInstanceJobDescription.processId());
+ scheduledJob.setRootProcessInstanceId(processInstanceJobDescription.rootProcessInstanceId());
+ scheduledJob.setRootProcessId(processInstanceJobDescription.rootProcessId());
+ scheduledJob.setNodeInstanceId(processInstanceJobDescription.nodeInstanceId());
+ }
byte[] jsonContent = objectMapper.writeValueAsBytes(scheduledJob);
JobInstanceDataEvent event = new JobInstanceDataEvent(JOB_EVENT_TYPE,
diff --git a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/test/java/org/kie/kogito/jobs/embedded/EmbeddedJobsServiceTest.java b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/test/java/org/kie/kogito/jobs/embedded/EmbeddedJobsServiceTest.java
index c854f86f7f..33e0c8be4b 100644
--- a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/test/java/org/kie/kogito/jobs/embedded/EmbeddedJobsServiceTest.java
+++ b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/test/java/org/kie/kogito/jobs/embedded/EmbeddedJobsServiceTest.java
@@ -28,7 +28,7 @@
import org.kie.kogito.event.job.JobInstanceDataEvent;
import org.kie.kogito.jobs.DurationExpirationTime;
import org.kie.kogito.jobs.JobsService;
-import org.kie.kogito.jobs.ProcessInstanceJobDescription;
+import org.kie.kogito.jobs.descriptors.ProcessInstanceJobDescription;
import io.quarkus.test.junit.QuarkusTest;
@@ -58,7 +58,7 @@ public void testJobService() throws Exception {
CountDownLatch latch = new CountDownLatch(8);
publisher.setLatch(latch);
- ProcessInstanceJobDescription description = ProcessInstanceJobDescription.builder()
+ ProcessInstanceJobDescription description = ProcessInstanceJobDescription.newProcessInstanceJobDescriptionBuilder()
.generateId()
.timerId("-1")
.expirationTime(DurationExpirationTime.now())
@@ -68,9 +68,9 @@ public void testJobService() throws Exception {
.rootProcessId(null)
.nodeInstanceId(NODE_INSTANCE_ID)
.build();
- jobService.scheduleProcessInstanceJob(description);
+ jobService.scheduleJob(description);
- ProcessInstanceJobDescription descriptionWRootProcess = ProcessInstanceJobDescription.builder()
+ ProcessInstanceJobDescription descriptionWRootProcess = ProcessInstanceJobDescription.newProcessInstanceJobDescriptionBuilder()
.generateId()
.timerId("-1")
.expirationTime(DurationExpirationTime.now())
@@ -80,7 +80,7 @@ public void testJobService() throws Exception {
.rootProcessId(ROOT_PROCESS_ID)
.nodeInstanceId(NODE_INSTANCE_ID)
.build();
- jobService.scheduleProcessInstanceJob(descriptionWRootProcess);
+ jobService.scheduleJob(descriptionWRootProcess);
latch.await();