You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by he...@apache.org on 2022/02/26 06:59:14 UTC
[incubator-inlong] branch master updated: [INLONG-2731][Manager] Add deep clone method to service task, use prototype instead of singleton (#2733)
This is an automated email from the ASF dual-hosted git repository.
healchow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-inlong.git
The following commit(s) were added to refs/heads/master by this push:
new 847c9a6 [INLONG-2731][Manager] Add deep clone method to service task, use prototype instead of singleton (#2733)
847c9a6 is described below
commit 847c9a6d2af67b7f3694700ea6ae43322c81055f
Author: kipshi <48...@users.noreply.github.com>
AuthorDate: Sat Feb 26 14:59:09 2022 +0800
[INLONG-2731][Manager] Add deep clone method to service task, use prototype instead of singleton (#2733)
---
.../workflow/core/impl/WorkflowContextBuilderImpl.java | 13 +++++++++----
.../inlong/manager/workflow/definition/ServiceTask.java | 10 ++++++++++
.../apache/inlong/manager/workflow/definition/UserTask.java | 9 +++++++++
.../inlong/manager/workflow/definition/WorkflowTask.java | 1 +
4 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java
index 7ebe747..8a5d799 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java
@@ -18,6 +18,7 @@
package org.apache.inlong.manager.workflow.core.impl;
import com.google.common.collect.Lists;
+import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.apache.inlong.manager.common.util.JsonUtils;
import org.apache.inlong.manager.common.util.Preconditions;
@@ -55,9 +56,10 @@ public class WorkflowContextBuilderImpl implements WorkflowContextBuilder {
this.taskEntityMapper = taskEntityMapper;
}
+ @SneakyThrows
@Override
public WorkflowContext buildContextForProcess(String name, String applicant, ProcessForm form) {
- WorkflowProcess process = definitionRepository.get(name);
+ WorkflowProcess process = definitionRepository.get(name).clone();
WorkflowContext context = new WorkflowContext();
context.setProcess(process);
context.setProcessForm(form);
@@ -66,11 +68,12 @@ public class WorkflowContextBuilderImpl implements WorkflowContextBuilder {
return context;
}
+ @SneakyThrows
@Override
public WorkflowContext buildContextForProcess(Integer processId) {
WorkflowProcessEntity processEntity = processEntityMapper.selectById(processId);
Preconditions.checkNotNull(processEntity, "process not exist with id: " + processId);
- WorkflowProcess process = definitionRepository.get(processEntity.getName());
+ WorkflowProcess process = definitionRepository.get(processEntity.getName()).clone();
return new WorkflowContext()
.setApplicant(processEntity.getApplicant())
@@ -96,23 +99,25 @@ public class WorkflowContextBuilderImpl implements WorkflowContextBuilder {
return buildContextForTask(taskId, action, null, transferToUsers, remark, operator);
}
+ @SneakyThrows
@Override
public WorkflowContext buildContextForTask(Integer taskId, WorkflowAction action) {
WorkflowTaskEntity taskEntity = taskEntityMapper.selectById(taskId);
- WorkflowProcess process = definitionRepository.get(taskEntity.getProcessName());
+ WorkflowProcess process = definitionRepository.get(taskEntity.getProcessName()).clone();
TaskForm taskForm = WorkflowFormParserUtils.parseTaskForm(taskEntity, process);
List<String> transferToUsers = getTransferToUsers(taskEntity.getExtParams());
return buildContextForTask(taskId, action, taskForm, transferToUsers, taskEntity.getRemark(),
taskEntity.getOperator());
}
+ @SneakyThrows
private WorkflowContext buildContextForTask(Integer taskId, WorkflowAction action, TaskForm taskForm,
List<String> transferToUsers, String remark, String operator) {
WorkflowTaskEntity taskEntity = taskEntityMapper.selectById(taskId);
Preconditions.checkNotNull(taskEntity, "task not exist with id: " + taskId);
WorkflowProcessEntity processEntity = processEntityMapper.selectById(taskEntity.getProcessId());
- WorkflowProcess process = definitionRepository.get(processEntity.getName());
+ WorkflowProcess process = definitionRepository.get(processEntity.getName()).clone();
ProcessForm processForm = WorkflowFormParserUtils.parseProcessForm(processEntity.getFormData(), process);
WorkflowTask task = process.getTaskByName(taskEntity.getName());
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java
index 482320a..6aefdb5 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java
@@ -20,6 +20,7 @@ package org.apache.inlong.manager.workflow.definition;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import java.util.concurrent.atomic.AtomicBoolean;
+import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.inlong.manager.common.exceptions.WorkflowException;
import org.apache.inlong.manager.common.util.Preconditions;
@@ -84,6 +85,15 @@ public class ServiceTask extends WorkflowTask {
}
}
+ @SneakyThrows
+ @Override
+ public ServiceTask clone() {
+ ServiceTask serviceTask = (ServiceTask) super.clone();
+ serviceTask.addServiceTaskType(this.serviceTaskType);
+ serviceTask.addListenerProvider(this.listenerProvider);
+ return serviceTask;
+ }
+
public WorkflowTask addListenerProvider(ServiceTaskListenerProvider provider) {
this.listenerProvider = provider;
return this;
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java
index 8d3b67a..910a864 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableSet;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
+import lombok.SneakyThrows;
import org.apache.inlong.manager.common.exceptions.WorkflowException;
import org.apache.inlong.manager.common.pojo.workflow.form.TaskForm;
import org.apache.inlong.manager.common.util.Preconditions;
@@ -75,4 +76,12 @@ public class UserTask extends WorkflowTask {
}
}
+ @SneakyThrows
+ @Override
+ public UserTask clone() {
+ UserTask userTask = (UserTask) super.clone();
+ userTask.setApproverAssign(this.approverAssign);
+ userTask.setFormClass(this.formClass);
+ return userTask;
+ }
}
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java
index af7a925..28eeb98 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java
@@ -77,6 +77,7 @@ public abstract class WorkflowTask extends NextableElement implements SkippableE
WorkflowTask cloneTask = (WorkflowTask) super.clone();
cloneTask.setSyncListeners(new HashMap<>(syncListeners));
cloneTask.setAsyncListeners(new HashMap<>(asyncListeners));
+ cloneTask.setNameToListenerMap(new HashMap<>(nameToListenerMap));
return cloneTask;
}