From 54024ad32a9666d444ea7d8f5875d0d888224251 Mon Sep 17 00:00:00 2001 From: OmarAlsawaf Date: Tue, 26 Aug 2025 13:15:35 +0200 Subject: [PATCH 1/5] fix issue 3921 --- .../impl/util/ProcessInstanceHelper.java | 2 +- .../bpmn/event/signal/SignalEventTest.java | 34 ++++- .../test/bpmn/event/signal/mainProcessV2.bpmn | 132 ++++++++++++++++++ 3 files changed, 162 insertions(+), 6 deletions(-) create mode 100644 modules/flowable-engine/src/test/resources/org/flowable/engine/test/bpmn/event/signal/mainProcessV2.bpmn diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java index d50533f862a..97071b2032c 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java @@ -454,7 +454,7 @@ protected void handleSignalEventSubscription(EventDefinition eventDefinition, St BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(parentExecution.getProcessDefinitionId()); Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); if (signal != null) { - signalEventDefinition.setSignalRef(signal.getName()); + signalEventDefinition.setSignalRef(signal.getId()); } ExecutionEntity signalExecution = processEngineConfiguration.getExecutionEntityManager().createChildExecution(parentExecution); diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java index f00977674c8..36937f8cfc5 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java @@ -18,11 +18,7 @@ import static org.assertj.core.api.Assertions.tuple; import static org.assertj.core.data.MapEntry.entry; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import org.assertj.core.groups.Tuple; import org.flowable.common.engine.api.FlowableException; @@ -49,6 +45,34 @@ */ public class SignalEventTest extends PluggableFlowableTestCase { + + @Test + @Deployment(resources = {"org/flowable/engine/test/bpmn/event/signal/mainProcessV2.bpmn"}) + public void testSignalScope_WhenSignalIdNotEqualSignalName_GivenMultipleProcessInstances() { + + List processInstances = new ArrayList<>(); + processInstances.add(runtimeService.startProcessInstanceByKey("mainProcess")); + processInstances.add(runtimeService.startProcessInstanceByKey("mainProcess")); + processInstances.add(runtimeService.startProcessInstanceByKey("mainProcess")); + + List currentSubscriptionList = runtimeService.createEventSubscriptionQuery().list(); + + assertThat(currentSubscriptionList).hasSize(processInstances.size()); + assertThat(currentSubscriptionList).extracting(EventSubscription::getConfiguration).doesNotContainNull(); + } + + @Test + @Deployment(resources = {"org/flowable/engine/test/bpmn/event/signal/mainProcessV2.bpmn"}) + public void testSignalScope_WhenSignalIdNotEqualSignalName_GivenSingleProcessInstance() { + + ProcessInstance processInstances = runtimeService.startProcessInstanceByKey("mainProcess"); + + List currentSubscriptionList = runtimeService.createEventSubscriptionQuery().list(); + + assertThat(currentSubscriptionList).hasSize(1); + assertThat(currentSubscriptionList).extracting(EventSubscription::getConfiguration).doesNotContainNull(); + } + @Test @Deployment(resources = { "org/flowable/engine/test/bpmn/event/signal/SignalEventTests.catchAlertSignal.bpmn20.xml", "org/flowable/engine/test/bpmn/event/signal/SignalEventTests.throwAlertSignal.bpmn20.xml" }) diff --git a/modules/flowable-engine/src/test/resources/org/flowable/engine/test/bpmn/event/signal/mainProcessV2.bpmn b/modules/flowable-engine/src/test/resources/org/flowable/engine/test/bpmn/event/signal/mainProcessV2.bpmn new file mode 100644 index 00000000000..6f06ac4a5d4 --- /dev/null +++ b/modules/flowable-engine/src/test/resources/org/flowable/engine/test/bpmn/event/signal/mainProcessV2.bpmn @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From cfde03eb52a00856d37646b06fb1021616a33d1e Mon Sep 17 00:00:00 2001 From: OmarAlsawaf Date: Tue, 26 Aug 2025 13:47:24 +0200 Subject: [PATCH 2/5] fix issue-3921 --- .../engine/test/bpmn/event/signal/SignalEventTest.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java index 36937f8cfc5..2af43159d2a 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java @@ -18,7 +18,7 @@ import static org.assertj.core.api.Assertions.tuple; import static org.assertj.core.data.MapEntry.entry; -import java.util.*; + import org.assertj.core.groups.Tuple; import org.flowable.common.engine.api.FlowableException; @@ -39,6 +39,14 @@ import org.flowable.validation.validator.Problems; import org.junit.jupiter.api.Test; +import java.util.HashMap; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.Arrays; +import java.util.Date; + + /** * @author Tijs Rademakers * @author Joram Barrez From e66056771d784d5107d0832e00428c790bbe958e Mon Sep 17 00:00:00 2001 From: OmarAlsawaf Date: Tue, 26 Aug 2025 13:57:30 +0200 Subject: [PATCH 3/5] reorganizing imports --- .../test/bpmn/event/signal/SignalEventTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java index 2af43159d2a..8d0e424a1ed 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java @@ -18,7 +18,12 @@ import static org.assertj.core.api.Assertions.tuple; import static org.assertj.core.data.MapEntry.entry; - +import java.util.HashMap; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.Arrays; +import java.util.Date; import org.assertj.core.groups.Tuple; import org.flowable.common.engine.api.FlowableException; @@ -39,12 +44,7 @@ import org.flowable.validation.validator.Problems; import org.junit.jupiter.api.Test; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import java.util.Map; -import java.util.Arrays; -import java.util.Date; + /** From 504140630ff3ea60d78bf41528aa1a7e517281af Mon Sep 17 00:00:00 2001 From: OmarAlsawaf Date: Tue, 26 Aug 2025 14:08:33 +0200 Subject: [PATCH 4/5] auto configuring imports --- .../engine/test/bpmn/event/signal/SignalEventTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java index 8d0e424a1ed..d725840580c 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/event/signal/SignalEventTest.java @@ -18,12 +18,12 @@ import static org.assertj.core.api.Assertions.tuple; import static org.assertj.core.data.MapEntry.entry; -import java.util.HashMap; -import java.util.List; import java.util.ArrayList; -import java.util.Map; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.assertj.core.groups.Tuple; import org.flowable.common.engine.api.FlowableException; From 7d76e2b39946e3329a15714eb29db9afccdcfedf Mon Sep 17 00:00:00 2001 From: OmarAlsawaf Date: Mon, 1 Sep 2025 17:53:00 +0200 Subject: [PATCH 5/5] extending issues-3921 fix to migration secnario --- .../dynamic/AbstractDynamicStateManager.java | 2 +- ...sInstanceMigrationEventSubProcessTest.java | 35 ++++ .../runtime/migration/migrationProcess.bpmn | 163 ++++++++++++++++++ .../runtime/migration/originalProcess.bpmn | 89 ++++++++++ 4 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/migrationProcess.bpmn create mode 100644 modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/originalProcess.bpmn diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/dynamic/AbstractDynamicStateManager.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/dynamic/AbstractDynamicStateManager.java index 463ff28aa45..14457bf375c 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/dynamic/AbstractDynamicStateManager.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/dynamic/AbstractDynamicStateManager.java @@ -1607,7 +1607,7 @@ protected void processCreatedEventSubProcess(EventSubProcess eventSubProcess, Ex BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(eventSubProcessExecution.getProcessDefinitionId()); Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); if (signal != null) { - signalEventDefinition.setSignalRef(signal.getName()); + signalEventDefinition.setSignalRef(signal.getId()); } ExecutionEntity signalExecution = processEngineConfiguration.getExecutionEntityManager().createChildExecution(eventSubProcessExecution.getParent()); diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationEventSubProcessTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationEventSubProcessTest.java index e9eb62e6800..e6f51a43803 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationEventSubProcessTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationEventSubProcessTest.java @@ -58,6 +58,41 @@ protected void tearDown() { deleteDeployments(); } + @Test + public void testSignalScope_WhenSignalIdNotEqualSignalName_GivenMultiInstanceMigration(){ + //create process Definition + ProcessDefinition originalProcessDef = deployProcessDefinition("mainProcessDeployment", + "org/flowable/engine/test/api/runtime/migration/originalProcess.bpmn"); + + ProcessDefinition migrationProcessDef = deployProcessDefinition("mainProcessDeployment", + "org/flowable/engine/test/api/runtime/migration/migrationProcess.bpmn"); + + //create multi-proc instances + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(originalProcessDef.getKey()); + ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKey(originalProcessDef.getKey()); + + //choose a migration state + ProcessInstanceMigrationBuilder processInstanceMigrationBuilder = processMigrationService.createProcessInstanceMigrationBuilder() + .migrateToProcessDefinition(migrationProcessDef.getId()) + .addActivityMigrationMapping(ActivityMigrationMapping.createMappingFor("userTask", "userTask")) + .addActivityMigrationMapping(ActivityMigrationMapping.createMappingFor("sendSignalTask", "subProcessTask")); + + + ProcessInstanceMigrationValidationResult processInstanceMigrationValidationResult = processInstanceMigrationBuilder + .validateMigration(processInstance.getId()); + + assertThat(processInstanceMigrationValidationResult.isMigrationValid()).isTrue(); + + //migration + processInstanceMigrationBuilder.migrate(processInstance.getId()); + processInstanceMigrationBuilder.migrate(processInstance2.getId()); + + List currentSubscriptionList = runtimeService.createEventSubscriptionQuery().list(); + assertThat(currentSubscriptionList).extracting(EventSubscription::getConfiguration).doesNotContainNull(); + + + } + @Test public void testMigrateSimpleActivityToActivityInsideSignalEventSubProcessInNewDefinition() { ProcessDefinition procDefOneTask = deployProcessDefinition("my deploy", diff --git a/modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/migrationProcess.bpmn b/modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/migrationProcess.bpmn new file mode 100644 index 00000000000..bc546b11132 --- /dev/null +++ b/modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/migrationProcess.bpmn @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/originalProcess.bpmn b/modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/originalProcess.bpmn new file mode 100644 index 00000000000..c0348c5b0d6 --- /dev/null +++ b/modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/runtime/migration/originalProcess.bpmn @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file