This is an automated email from the ASF dual-hosted git repository.
egonzalez pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new f0b82d517a [ncubator-kie-issues-1928] UserTasks JPA Storage Reduce
number of queries when storing named data (#3897)
f0b82d517a is described below
commit f0b82d517a8eb9001a4933ceba8e13e9db643d9c
Author: Pere Fernández <[email protected]>
AuthorDate: Fri May 2 09:42:55 2025 +0200
[ncubator-kie-issues-1928] UserTasks JPA Storage Reduce number of queries
when storing named data (#3897)
---
.../jbpm/usertask/jpa/JPAUserTaskInstances.java | 12 +++-------
.../jpa/mapper/TaskInputsEntityMapper.java | 3 ++-
.../jpa/mapper/TaskMetadataEntityMapper.java | 4 +++-
.../jpa/mapper/TaskOutputsEntityMapper.java | 3 ++-
.../jbpm/usertask/jpa/model/AttachmentEntity.java | 2 +-
.../usertask/jpa/model/TaskDeadlineEntity.java | 2 +-
.../jpa/model/TaskDeadlineTimerEntity.java | 2 +-
.../jbpm/usertask/jpa/model/TaskInputEntity.java | 5 +++-
.../usertask/jpa/model/TaskMetadataEntity.java | 3 ++-
.../jbpm/usertask/jpa/model/TaskOutputEntity.java | 3 ++-
.../usertask/jpa/model/TaskReassignmentEntity.java | 2 +-
.../jpa/model/TaskReassignmentTimerEntity.java | 2 +-
.../usertask/jpa/model/UserTaskInstanceEntity.java | 27 ++++++++--------------
.../usertask/jpa/repository/BaseRepository.java | 4 +++-
.../jpa/repository/UserTaskInstanceRepository.java | 9 ++++++++
.../usertask/jpa/JPAUserTaskInstancesTest.java | 18 +--------------
.../jbpm/usertask/jpa/mapper/utils/TestUtils.java | 15 +++++++-----
.../handler/UserTaskKogitoWorkItemHandler.java | 25 ++++++++++----------
.../usertask/impl/DefaultUserTaskInstance.java | 6 +----
.../BaseQuarkusJPAUserTaskInstancesTest.java | 13 ++++-------
.../src/main/resources/application.properties | 2 ++
21 files changed, 75 insertions(+), 87 deletions(-)
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/JPAUserTaskInstances.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/JPAUserTaskInstances.java
index d2f6a5e4cb..c68d759324 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/JPAUserTaskInstances.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/JPAUserTaskInstances.java
@@ -68,20 +68,14 @@ public class JPAUserTaskInstances implements
UserTaskInstances {
@Override
public UserTaskInstance create(UserTaskInstance userTaskInstance) {
- Optional<UserTaskInstanceEntity> optional =
userTaskInstanceRepository.findById(userTaskInstance.getId());
-
- if (optional.isPresent()) {
- LOGGER.error("Cannot create userTaskInstance with id {}. Task
Already exists.", userTaskInstance.getId());
- throw new IllegalArgumentException("Cannot create userTaskInstance
with id " + userTaskInstance.getId() + ". Task Already exists.");
- }
UserTaskInstanceEntity entity = new UserTaskInstanceEntity();
entity.setId(userTaskInstance.getId());
- this.userTaskInstanceRepository.persist(entity);
-
userTaskInstanceEntityMapper.mapTaskInstanceToEntity(userTaskInstance,
entity);
+ this.userTaskInstanceRepository.persist(entity);
+
return this.reconnectUserTaskInstance.apply(userTaskInstance);
}
@@ -113,7 +107,7 @@ public class JPAUserTaskInstances implements
UserTaskInstances {
throw new RuntimeException("Could not remove userTaskInstance with
id " + userTaskInstance.getId() + ", userTaskInstance cannot be found");
}
- this.userTaskInstanceRepository.remove(optional.get());
+ this.userTaskInstanceRepository.delete(optional.get());
return this.disconnectUserTaskInstance.apply(userTaskInstance);
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
index a61ffabcdd..d088af53a3 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
@@ -59,11 +59,12 @@ public class TaskInputsEntityMapper implements EntityMapper
{
userTaskInstanceEntity.addInput(entity);
return entity;
});
- inputEntity.setName(key);
+
if (Objects.nonNull(value)) {
inputEntity.setValue(JSONUtils.valueToString(value).getBytes(StandardCharsets.UTF_8));
inputEntity.setJavaType(value.getClass().getName());
}
+ repository.persist(inputEntity);
});
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
index b4af4fc8a9..18fa39dc2c 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
@@ -54,14 +54,16 @@ public class TaskMetadataEntityMapper implements
EntityMapper {
userTaskInstance.getMetadata().forEach((key, value) -> {
TaskMetadataEntity metadataEntity =
userTaskInstanceEntity.getMetadata().stream().filter(entity ->
entity.getName().equals(key)).findFirst().orElseGet(() -> {
TaskMetadataEntity entity = new TaskMetadataEntity();
+ entity.setName(key);
userTaskInstanceEntity.addMetadata(entity);
return entity;
});
- metadataEntity.setName(key);
+
if (Objects.nonNull(value)) {
metadataEntity.setValue(JSONUtils.valueToString(value));
metadataEntity.setJavaType(value.getClass().getName());
}
+ repository.persist(metadataEntity);
});
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
index 5f93dd53ee..131de03617 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
@@ -59,11 +59,12 @@ public class TaskOutputsEntityMapper implements
EntityMapper {
userTaskInstanceEntity.addOutput(entity);
return entity;
});
- outputEntity.setName(key);
+
if (Objects.nonNull(value)) {
outputEntity.setValue(JSONUtils.valueToString(value).getBytes(StandardCharsets.UTF_8));
outputEntity.setJavaType(value.getClass().getName());
}
+ repository.persist(outputEntity);
});
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/AttachmentEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/AttachmentEntity.java
index 57b6fb8f02..0ab9751bf9 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/AttachmentEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/AttachmentEntity.java
@@ -41,7 +41,7 @@ public class AttachmentEntity {
@Column(name = "updated_at")
private Date updatedAt;
- @ManyToOne
+ @ManyToOne(optional = false)
@JoinColumn(name = "task_id", foreignKey = @ForeignKey(name =
"fk_user_tasks_attachments_tid"))
private UserTaskInstanceEntity taskInstance;
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineEntity.java
index 35f790adb1..c753a1efcd 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineEntity.java
@@ -38,7 +38,7 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "value", column = @Column(name =
"notification_value"))
})
@AssociationOverride(name = "taskInstance",
- joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "jbpm_user_tasks_deadline_tid")))
+ joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "fk_jbpm_user_tasks_deadline_tid")))
public class TaskDeadlineEntity extends TaskTimerConfigEntity<byte[]> {
@Column(name = "notification_type")
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineTimerEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineTimerEntity.java
index 0c3d762f22..f9cc531970 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineTimerEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskDeadlineTimerEntity.java
@@ -39,7 +39,7 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "value", column = @Column(name =
"notification_value"))
})
@AssociationOverride(name = "taskInstance",
- joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "jbpm_user_tasks_deadline_timer_tid")))
+ joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "fk_jbpm_user_tasks_deadline_timer_tid")))
public class TaskDeadlineTimerEntity extends TaskTimerDataEntity<byte[]> {
@Column(name = "notification_type")
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskInputEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskInputEntity.java
index 3439ed45fd..e55be2ab16 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskInputEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskInputEntity.java
@@ -25,6 +25,7 @@ import jakarta.persistence.AttributeOverrides;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
+import jakarta.persistence.JoinColumn;
import jakarta.persistence.Table;
@Entity
@@ -33,7 +34,9 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "name", column = @Column(name =
"input_name")),
@AttributeOverride(name = "value", column = @Column(name =
"input_value"))
})
-@AssociationOverride(name = "taskInstance", foreignKey = @ForeignKey(name =
"jbpm_user_tasks_inputs_tid"))
+@AssociationOverride(name = "taskInstance",
+ joinColumns = @JoinColumn(name = "task_id"),
+ foreignKey = @ForeignKey(name = "fk_jbpm_user_tasks_inputs_tid"))
public class TaskInputEntity extends TaskNamedDataEntity<byte[]> {
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskMetadataEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskMetadataEntity.java
index b7d05701c8..0edf3b224a 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskMetadataEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskMetadataEntity.java
@@ -35,7 +35,8 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "value", column = @Column(name =
"metadata_value"))
})
@AssociationOverride(name = "taskInstance",
- joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "jbpm_user_tasks_metadata_tid")))
+ joinColumns = { @JoinColumn(name = "task_id") },
+ foreignKey = @ForeignKey(name = "fk_jbpm_user_tasks_metadata_tid"))
public class TaskMetadataEntity extends TaskNamedDataEntity<String> {
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskOutputEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskOutputEntity.java
index 7961dcecc9..1f8b233f34 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskOutputEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskOutputEntity.java
@@ -35,7 +35,8 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "value", column = @Column(name =
"output_value"))
})
@AssociationOverride(name = "taskInstance",
- joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "jbpm_user_tasks_outputs_tid")))
+ joinColumns = @JoinColumn(name = "task_id"),
+ foreignKey = @ForeignKey(name = "fk_jbpm_user_tasks_outputs_tid"))
public class TaskOutputEntity extends TaskNamedDataEntity<byte[]> {
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentEntity.java
index 9bd409cd7d..d6c5c41dac 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentEntity.java
@@ -38,7 +38,7 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "value", column = @Column(name =
"reassignment_value"))
})
@AssociationOverride(name = "taskInstance",
- joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "jbpm_user_tasks_reassignment_tid")))
+ joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "fk_jbpm_user_tasks_reassignment_tid")))
public class TaskReassignmentEntity extends TaskTimerConfigEntity<byte[]> {
@Column(name = "reassignment_type")
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentTimerEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentTimerEntity.java
index 8b735917c5..e01e08a01f 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentTimerEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/TaskReassignmentTimerEntity.java
@@ -39,7 +39,7 @@ import jakarta.persistence.Table;
@AttributeOverride(name = "value", column = @Column(name =
"reassignment_value"))
})
@AssociationOverride(name = "taskInstance",
- joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "jbpm_user_tasks_reassignment_timer_tid")))
+ joinColumns = @JoinColumn(name = "task_id", foreignKey =
@ForeignKey(name = "fk_jbpm_user_tasks_reassignment_timer_tid")))
public class TaskReassignmentTimerEntity extends TaskTimerDataEntity<byte[]> {
@Column(name = "reassignment_type")
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/UserTaskInstanceEntity.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/UserTaskInstanceEntity.java
index b721f0ce3f..3ce3593d16 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/UserTaskInstanceEntity.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/model/UserTaskInstanceEntity.java
@@ -26,18 +26,7 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
-import jakarta.persistence.CascadeType;
-import jakarta.persistence.CollectionTable;
-import jakarta.persistence.Column;
-import jakarta.persistence.ElementCollection;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.ForeignKey;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.NamedQuery;
-import jakarta.persistence.OneToMany;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
@Entity
@NamedQuery(name = UserTaskInstanceEntity.GET_INSTANCES_BY_IDENTITY,
@@ -49,9 +38,13 @@ import jakarta.persistence.Table;
"or adminGroups in (:roles) " +
"or (:userId member of userTask.potentialUsers and :userId not
member of userTask.excludedUsers) " +
"or potentialGroups in (:roles)")
+@NamedNativeQuery(
+ name = UserTaskInstanceEntity.DELETE_BY_ID,
+ query = "delete from jbpm_user_tasks where id = :taskId")
@Table(name = "jbpm_user_tasks")
public class UserTaskInstanceEntity {
public static final String GET_INSTANCES_BY_IDENTITY =
"UserTaskInstanceEntity.GetInstanceByIdentity";
+ public static final String DELETE_BY_ID =
"UserTaskInstanceEntity.DeleteById";
@Id
private String id;
@@ -79,29 +72,29 @@ public class UserTaskInstanceEntity {
@Column(name = "external_reference_id")
private String externalReferenceId;
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "jbpm_user_tasks_potential_users", joinColumns =
@JoinColumn(name = "task_id", foreignKey = @ForeignKey(name =
"fk_jbpm_user_tasks_potential_users_tid")))
@Column(name = "user_id", nullable = false)
private Set<String> potentialUsers = new HashSet<>();
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "jbpm_user_tasks_potential_groups", joinColumns =
@JoinColumn(name = "task_id"),
foreignKey = @ForeignKey(name =
"fk_jbpm_user_tasks_potential_groups_tid"))
@Column(name = "group_id")
private Set<String> potentialGroups = new HashSet<>();
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "jbpm_user_tasks_admin_users", joinColumns =
@JoinColumn(name = "task_id", foreignKey = @ForeignKey(name =
"fk_jbpm_user_tasks_admin_users_tid")))
@Column(name = "user_id", nullable = false)
private Set<String> adminUsers = new HashSet<>();
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "jbpm_user_tasks_admin_groups", joinColumns =
@JoinColumn(name = "task_id"),
foreignKey = @ForeignKey(name =
"fk_jbpm_user_tasks_admin_groups_tid"))
@Column(name = "group_id")
private Set<String> adminGroups = new HashSet<>();
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "jbpm_user_tasks_excluded_users", joinColumns =
@JoinColumn(name = "task_id", foreignKey = @ForeignKey(name =
"fk_jbpm_user_tasks_excluded_users_tid")))
@Column(name = "user_id", nullable = false)
private Set<String> excludedUsers = new HashSet<>();
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/BaseRepository.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/BaseRepository.java
index ed144ddbc0..ad03a67b6d 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/BaseRepository.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/BaseRepository.java
@@ -47,7 +47,9 @@ public abstract class BaseRepository<T, K> {
}
public T update(T entity) {
- return this.getEntityManager().merge(entity);
+ this.getEntityManager().merge(entity);
+ this.getEntityManager().flush();
+ return entity;
}
public T remove(T entity) {
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/UserTaskInstanceRepository.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/UserTaskInstanceRepository.java
index 1be6a4aec7..6c62b15175 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/UserTaskInstanceRepository.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/repository/UserTaskInstanceRepository.java
@@ -26,6 +26,7 @@ import org.kie.kogito.auth.IdentityProvider;
import jakarta.persistence.TypedQuery;
+import static org.jbpm.usertask.jpa.model.UserTaskInstanceEntity.DELETE_BY_ID;
import static
org.jbpm.usertask.jpa.model.UserTaskInstanceEntity.GET_INSTANCES_BY_IDENTITY;
public class UserTaskInstanceRepository extends
BaseRepository<UserTaskInstanceEntity, String> {
@@ -41,6 +42,14 @@ public class UserTaskInstanceRepository extends
BaseRepository<UserTaskInstanceE
return query.getResultList();
}
+ public UserTaskInstanceEntity delete(UserTaskInstanceEntity entity) {
+ getEntityManager().detach(entity);
+ getEntityManager().createNamedQuery(DELETE_BY_ID)
+ .setParameter("taskId", entity.getId())
+ .executeUpdate();
+ return entity;
+ }
+
@Override
public Class<UserTaskInstanceEntity> getEntityClass() {
return UserTaskInstanceEntity.class;
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/JPAUserTaskInstancesTest.java
b/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/JPAUserTaskInstancesTest.java
index b93b54e51e..dda0fc58e3 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/JPAUserTaskInstancesTest.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/JPAUserTaskInstancesTest.java
@@ -158,8 +158,6 @@ public class JPAUserTaskInstancesTest {
@Test
public void testSuccessfulCreate() {
-
when(userTaskInstanceRepository.findById(any())).thenReturn(Optional.empty());
-
jpaUserTaskInstances.create(TestUtils.createUserTaskInstance());
verify(userTaskInstanceRepository, times(1)).persist(any());
@@ -167,20 +165,6 @@ public class JPAUserTaskInstancesTest {
verify(reconnectUserTaskInstance, times(1)).apply(any());
}
- @Test
- public void testUnSuccessfulCreate() {
- Optional<UserTaskInstanceEntity> result =
Optional.of(TestUtils.createUserTaskInstanceEntity());
- when(userTaskInstanceRepository.findById(any())).thenReturn(result);
-
- Assertions.assertThatThrownBy(() -> {
- jpaUserTaskInstances.create(TestUtils.createUserTaskInstance());
- }).hasMessageContaining("Task Already exists.");
-
- verify(userTaskInstanceRepository, never()).persist(any());
- verify(userTaskInstanceEntityMapper,
never()).mapTaskInstanceToEntity(any(), any());
- verify(reconnectUserTaskInstance, never()).apply(any());
- }
-
@Test
public void testSuccessfulUpdate() {
Optional<UserTaskInstanceEntity> result =
Optional.of(TestUtils.createUserTaskInstanceEntity());
@@ -211,7 +195,7 @@ public class JPAUserTaskInstancesTest {
jpaUserTaskInstances.remove(TestUtils.createUserTaskInstance());
- verify(userTaskInstanceRepository, times(1)).remove(any());
+ verify(userTaskInstanceRepository, times(1)).delete(any());
verify(disconnectUserTaskInstance, times(1)).apply(any());
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/mapper/utils/TestUtils.java
b/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/mapper/utils/TestUtils.java
index 0d501f1478..de17e0084c 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/mapper/utils/TestUtils.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/test/java/org/jbpm/usertask/jpa/mapper/utils/TestUtils.java
@@ -282,12 +282,15 @@ public class TestUtils {
instance.setExternalReferenceId("external-reference-id");
- instance.setMetadata("ProcessId", "process-id");
- instance.setMetadata("ProcessType", "BPMN");
- instance.setMetadata("ProcessVersion", "1.0.0");
- instance.setMetadata("boolean", true);
- instance.setMetadata("integer", 0);
- instance.setMetadata("null", 0);
+ Map<String, Object> metadata = new HashMap<>();
+ metadata.put("ProcessId", "process-id");
+ metadata.put("ProcessType", "BPMN");
+ metadata.put("ProcessVersion", "1.0.0");
+ metadata.put("boolean", true);
+ metadata.put("integer", 0);
+ metadata.put("null", 0);
+
+ instance.setMetadata(metadata);
instance.setInput("in_string", "hello this is a string");
instance.setInput("in_integer", 1);
diff --git
a/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
b/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
index 4dabe08091..80a6ad977e 100644
---
a/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
+++
b/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
@@ -18,9 +18,7 @@
*/
package org.kie.kogito.jbpm.usertask.handler;
-import java.util.Collections;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import org.jbpm.workflow.core.node.HumanTaskNode;
import org.kie.kogito.Application;
@@ -90,15 +88,18 @@ public class UserTaskKogitoWorkItemHandler extends
DefaultKogitoWorkItemHandler
instance.setTaskPriority(priority != null ? priority.toString() :
null);
instance.setSlaDueDate(workItem.getNodeInstance().getSlaDueDate());
- instance.setMetadata("ProcessId",
workItem.getProcessInstance().getProcessId());
- instance.setMetadata("ProcessType",
workItem.getProcessInstance().getProcess().getType());
- instance.setMetadata("ProcessVersion",
workItem.getProcessInstance().getProcessVersion());
- instance.setMetadata("ProcessInstanceId",
workItem.getProcessInstance().getId());
- instance.setMetadata("ProcessInstanceState",
workItem.getProcessInstance().getState());
- instance.setMetadata("RootProcessId",
workItem.getProcessInstance().getRootProcessId());
- instance.setMetadata("RootProcessInstanceId",
workItem.getProcessInstance().getRootProcessInstanceId());
- instance.setMetadata("ParentProcessInstanceId",
workItem.getProcessInstance().getParentProcessInstanceId());
- instance.setMetadata("NodeInstanceId",
workItem.getNodeInstance().getId());
+ Map<String, Object> metadata = new HashMap<>();
+ metadata.put("ProcessId",
workItem.getProcessInstance().getProcessId());
+ metadata.put("ProcessType",
workItem.getProcessInstance().getProcess().getType());
+ metadata.put("ProcessVersion",
workItem.getProcessInstance().getProcessVersion());
+ metadata.put("ProcessInstanceId",
workItem.getProcessInstance().getId());
+ metadata.put("ProcessInstanceState",
workItem.getProcessInstance().getState());
+ metadata.put("RootProcessId",
workItem.getProcessInstance().getRootProcessId());
+ metadata.put("RootProcessInstanceId",
workItem.getProcessInstance().getRootProcessInstanceId());
+ metadata.put("ParentProcessInstanceId",
workItem.getProcessInstance().getParentProcessInstanceId());
+ metadata.put("NodeInstanceId", workItem.getNodeInstance().getId());
+
+ instance.setMetadata(metadata);
instance.fireInitialStateChange();
workItem.getParameters().entrySet().stream().filter(e ->
!HumanTaskNode.TASK_PARAMETERS.contains(e.getKey())).forEach(e ->
instance.setInput(e.getKey(), e.getValue()));
diff --git
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
index 84ee337f7f..6724d0fe4f 100644
---
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
+++
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
@@ -601,17 +601,13 @@ public class DefaultUserTaskInstance implements
UserTaskInstance {
this.comments = comments;
}
- public void setMetadata(String key, Object value) {
- this.metadata.put(key, value);
- updatePersistence();
- }
-
public Map<String, Object> getMetadata() {
return metadata;
}
public void setMetadata(Map<String, Object> metadata) {
this.metadata = metadata;
+ updatePersistence();
}
@Override
diff --git
a/quarkus/addons/jbpm-usertask-storage-jpa/runtime/src/test/java/org/jbpm/usertask/jpa/quarkus/BaseQuarkusJPAUserTaskInstancesTest.java
b/quarkus/addons/jbpm-usertask-storage-jpa/runtime/src/test/java/org/jbpm/usertask/jpa/quarkus/BaseQuarkusJPAUserTaskInstancesTest.java
index 1bfcc273af..c9d0e570b1 100644
---
a/quarkus/addons/jbpm-usertask-storage-jpa/runtime/src/test/java/org/jbpm/usertask/jpa/quarkus/BaseQuarkusJPAUserTaskInstancesTest.java
+++
b/quarkus/addons/jbpm-usertask-storage-jpa/runtime/src/test/java/org/jbpm/usertask/jpa/quarkus/BaseQuarkusJPAUserTaskInstancesTest.java
@@ -40,6 +40,7 @@ import org.kie.kogito.usertask.model.Comment;
import org.mockito.Mockito;
import jakarta.inject.Inject;
+import jakarta.persistence.EntityExistsException;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@@ -78,7 +79,7 @@ public abstract class BaseQuarkusJPAUserTaskInstancesTest {
@Test
public void testCreateUserTask() {
- UserTaskInstance instance = createUserTaskInstance();
+ DefaultUserTaskInstance instance = createUserTaskInstance();
Assertions.assertThat(userTaskInstances.exists(instance.getId()))
.isFalse();
@@ -117,13 +118,7 @@ public abstract class BaseQuarkusJPAUserTaskInstancesTest {
userTaskInstances.create(instance);
Assertions.assertThatThrownBy(() -> userTaskInstances.create(instance))
- .isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Task Already exists.");
-
- userTaskInstances.remove(instance);
-
- Assertions.assertThat(userTaskInstances.exists(instance.getId()))
- .isFalse();
+ .isInstanceOf(EntityExistsException.class);
}
@Test
@@ -452,7 +447,7 @@ public abstract class BaseQuarkusJPAUserTaskInstancesTest {
TestUtils.assertUserTaskEntityMetadata(entity, instance);
}
- private UserTaskInstance createUserTaskInstance() {
+ private DefaultUserTaskInstance createUserTaskInstance() {
DefaultUserTaskInstance instance = TestUtils.createUserTaskInstance();
instance.setInstances(userTaskInstances);
diff --git
a/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/main/resources/application.properties
b/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/main/resources/application.properties
index c4b0747666..fcadbc4248 100644
---
a/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/main/resources/application.properties
+++
b/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/main/resources/application.properties
@@ -22,4 +22,6 @@
quarkus.datasource.devservices.image-name=mirror.gcr.io/postgres:15.9-alpine3.20
kogito.persistence.type=jdbc
+quarkus.hibernate-orm.database.generation=none
+
kie.flyway.enabled=true
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]