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 348ee1d325 [NO_ISSUE] remove duplicate start events (#4040)
348ee1d325 is described below
commit 348ee1d325fac00a7de18424becb9bcaaf8655c0
Author: Enrique <[email protected]>
AuthorDate: Thu Aug 28 17:04:40 2025 +0200
[NO_ISSUE] remove duplicate start events (#4040)
* [NO_ISSUE] remove duplicate start events
* fix duplicate event listeners during activation
* fix start event
* fix imports
* fix tests
---
.../impl/InMemoryProcessJobExecutorFactory.java | 12 ++++++-----
.../jbpm/process/instance/LightProcessRuntime.java | 14 +++++--------
.../instance/LightProcessRuntimeContext.java | 5 -----
.../process/instance/ProcessRuntimeContext.java | 2 --
.../kie/kogito/process/impl/AbstractProcess.java | 24 +++++-----------------
.../test/java/org/jbpm/bpmn2/StartEventTest.java | 4 ++--
.../org/kie/kogito/codegen/tests/TimerEventIT.java | 2 --
7 files changed, 19 insertions(+), 44 deletions(-)
diff --git
a/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryProcessJobExecutorFactory.java
b/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryProcessJobExecutorFactory.java
index 00ed9f8f49..38eff10594 100644
---
a/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryProcessJobExecutorFactory.java
+++
b/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryProcessJobExecutorFactory.java
@@ -77,11 +77,12 @@ public class InMemoryProcessJobExecutorFactory implements
JobExecutorFactory {
}
protected Runnable processJobByDescription(JobsService jobService,
InMemoryJobContext jobsConfiguration, ProcessJobDescription description) {
- return new StartProcessOnExpiredTimer(jobService, jobsConfiguration,
description.id(), description.process(), true, -1);
+ return new StartProcessOnExpiredTimer(jobService, jobsConfiguration,
description.id(), description.processId(), true, -1);
}
protected Runnable repeatableJobByDescription(JobsService jobService,
InMemoryJobContext jobsConfiguration, ProcessJobDescription description) {
- return new StartProcessOnExpiredTimer(jobService, jobsConfiguration,
description.id(), description.process(), false,
description.expirationTime().repeatLimit());
+ return new StartProcessOnExpiredTimer(jobService, jobsConfiguration,
description.id(), description.processId(), false,
+ description.expirationTime().repeatLimit());
}
}
@@ -147,16 +148,16 @@ class StartProcessOnExpiredTimer implements Runnable {
private boolean removeAtExecution;
@SuppressWarnings("rawtypes")
- private org.kie.kogito.process.Process process;
+ private String processId;
private Integer limit;
private JobsService jobService;
private InMemoryJobContext jobsConfiguration;
- public StartProcessOnExpiredTimer(JobsService jobService,
InMemoryJobContext jobsConfiguration, String id,
org.kie.kogito.process.Process<?> process, boolean removeAtExecution, Integer
limit) {
+ public StartProcessOnExpiredTimer(JobsService jobService,
InMemoryJobContext jobsConfiguration, String id, String processId, boolean
removeAtExecution, Integer limit) {
this.id = id;
- this.process = process;
+ this.processId = processId;
this.removeAtExecution = removeAtExecution;
this.limit = limit;
this.jobsConfiguration = jobsConfiguration;
@@ -169,6 +170,7 @@ class StartProcessOnExpiredTimer implements Runnable {
try {
LOGGER.debug("Job {} started", id);
UnitOfWorkExecutor.executeInUnitOfWork(jobsConfiguration.unitOfWorkManager(),
() -> {
+ org.kie.kogito.process.Process process =
jobsConfiguration.processes().processById(processId);
org.kie.kogito.process.ProcessInstance<?> pi =
process.createInstance(process.createModel());
if (pi != null) {
pi.start(TRIGGER, null);
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java
index 7c1a43e5c8..0148e40713 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java
@@ -82,10 +82,9 @@ public class LightProcessRuntime extends
AbstractProcessRuntime {
this.jobService = services.getJobsService();
this.processEventSupport = services.getEventSupport();
this.workItemManager = services.getKogitoWorkItemManager();
- if (isActive()) {
- initProcessEventListeners();
- initStartTimers();
- }
+
+ initProcessEventListeners();
+ initStartTimers();
initProcessActivationListener();
}
@@ -378,6 +377,8 @@ public class LightProcessRuntime extends
AbstractProcessRuntime {
@Override
public void dispose() {
+ removeProcessEventListeners();
+ initStartTimers();
this.processEventSupport.reset();
runtimeContext = null;
}
@@ -392,11 +393,6 @@ public class LightProcessRuntime extends
AbstractProcessRuntime {
this.processInstanceManager.clearProcessInstancesState();
}
- public boolean isActive() {
- // originally: kruntime.getEnvironment().get("Active")
- return runtimeContext.isActive();
- }
-
public class SignalManagerSignalAction extends
PropagationEntry.AbstractPropagationEntry implements WorkingMemoryAction {
private String type;
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntimeContext.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntimeContext.java
index 3fe0f58ebc..2d7bc5c1f5 100644
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntimeContext.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntimeContext.java
@@ -69,11 +69,6 @@ public class LightProcessRuntimeContext implements
ProcessRuntimeContext {
}
- @Override
- public boolean isActive() {
- return true;
- }
-
@Override
public ProcessInstance createProcessInstance(Process process,
CorrelationKey correlationKey) {
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeContext.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeContext.java
index e3d875b2a3..f5fc78d3f7 100644
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeContext.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeContext.java
@@ -41,8 +41,6 @@ public interface ProcessRuntimeContext {
void addEventListener(DefaultAgendaEventListener conditional);
- boolean isActive();
-
ProcessInstance createProcessInstance(Process process, CorrelationKey
correlationKey);
void setupParameters(ProcessInstance pi, Map<String, Object> parameters);
diff --git
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
index 0a17f49a3f..cce17f0560 100644
---
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
+++
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
@@ -18,7 +18,6 @@
*/
package org.kie.kogito.process.impl;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -38,8 +37,6 @@ import org.jbpm.process.instance.LightProcessRuntime;
import org.jbpm.process.instance.LightProcessRuntimeServiceProvider;
import org.jbpm.process.instance.ProcessRuntimeServiceProvider;
import org.jbpm.ruleflow.core.RuleFlowProcess;
-import org.jbpm.workflow.core.impl.WorkflowProcessImpl;
-import org.jbpm.workflow.core.node.StartNode;
import org.kie.api.runtime.process.EventListener;
import org.kie.api.runtime.process.WorkflowProcessInstance;
import org.kie.kogito.Application;
@@ -57,7 +54,6 @@ import org.kie.kogito.internal.utils.ConversionUtils;
import org.kie.kogito.jobs.DurationExpirationTime;
import org.kie.kogito.jobs.ExactExpirationTime;
import org.kie.kogito.jobs.ExpirationTime;
-import org.kie.kogito.jobs.descriptors.ProcessJobDescription;
import org.kie.kogito.process.MutableProcessInstances;
import org.kie.kogito.process.Process;
import org.kie.kogito.process.ProcessConfig;
@@ -85,8 +81,8 @@ public abstract class AbstractProcess<T extends Model>
implements Process<T>, Pr
protected Application app;
protected boolean activated;
- protected List<String> startTimerInstances = new ArrayList<>();
protected KogitoProcessRuntime processRuntime;
+ protected InternalProcessRuntime internalProcessRuntime;
private org.kie.api.definition.process.Process process;
private Lock processInitLock = new ReentrantLock();
@@ -226,18 +222,9 @@ public abstract class AbstractProcess<T extends Model>
implements Process<T>, Pr
if (this.activated) {
return;
}
+ this.internalProcessRuntime = LightProcessRuntime.of(app,
Collections.singletonList(get()), services);
this.processRuntime = createProcessRuntime().getKogitoProcessRuntime();
- WorkflowProcessImpl p = (WorkflowProcessImpl) get();
configure();
- List<StartNode> startNodes = p.getTimerStart();
- if (startNodes != null && !startNodes.isEmpty()) {
- for (StartNode startNode : startNodes) {
- if (startNode != null && startNode.getTimer() != null) {
- String timerId =
processRuntime.getJobsService().scheduleJob(ProcessJobDescription.of(configureTimerInstance(startNode.getTimer()),
this));
- startTimerInstances.add(timerId);
- }
- }
- }
// this belongs to only for the work item handler so we keep within
the context of the current process instance loaded in memory
if (this.services.getSignalManager() instanceof SignalManagerHub
signalManagerHub) {
processInstanceResolver = new ProcessInstanceResolver<T>() {
@@ -273,12 +260,11 @@ public abstract class AbstractProcess<T extends Model>
implements Process<T>, Pr
@Override
public void deactivate() {
- for (String startTimerId : startTimerInstances) {
- this.processRuntime.getJobsService().cancelJob(startTimerId);
- }
if (this.services.getSignalManager() instanceof SignalManagerHub
signalManagerHub) {
signalManagerHub.removeProcessInstanceResolver(processInstanceResolver);
}
+ this.internalProcessRuntime.dispose();
+ this.internalProcessRuntime = null;
this.activated = false;
}
@@ -328,7 +314,7 @@ public abstract class AbstractProcess<T extends Model>
implements Process<T>, Pr
protected abstract org.kie.api.definition.process.Process process();
protected InternalProcessRuntime createProcessRuntime() {
- return LightProcessRuntime.of(app, Collections.singletonList(get()),
services);
+ return internalProcessRuntime;
}
protected boolean isProcessFactorySet() {
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
index 8cd43e61b0..61df99b34c 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
@@ -271,8 +271,8 @@ public class StartEventTest extends JbpmBpmn2TestCase {
assertThat(startedProcesses).extracting(ProcessInstance::getProcessId).containsExactly("SignalStart");
definition.deactivate();
definition.send(SignalFactory.of("MySignal", "NewValue"));
- assertThat(startedProcesses).hasSize(2);
-
assertThat(startedProcesses).extracting(ProcessInstance::getProcessId).containsExactly("SignalStart",
"SignalStart");
+ assertThat(startedProcesses).hasSize(1);
+
assertThat(startedProcesses).extracting(ProcessInstance::getProcessId).containsExactly("SignalStart");
}
@Test
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/TimerEventIT.java
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/TimerEventIT.java
index a347727b53..48fce488d8 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/TimerEventIT.java
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/TimerEventIT.java
@@ -298,7 +298,5 @@ public class TimerEventIT extends AbstractCodegenIT {
// same amount of instances should be active as before deactivation
assertSize(p.instances(), ProcessInstanceReadMode.MUTABLE, 2);
- abort(p.instances());
- await().until(() -> p.instances().stream().count() == 0);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]