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 30968531f3 [incubator-kie-issues-2049] Custom collocated job service
for bpmn2 and springboot support (#4011)
30968531f3 is described below
commit 30968531f3fb0445046970b8500d875ecdacd4ea
Author: Enrique <[email protected]>
AuthorDate: Fri Aug 22 11:47:07 2025 +0200
[incubator-kie-issues-2049] Custom collocated job service for bpmn2 and
springboot support (#4011)
* [incubator-kie-issues-2049] Custom collocated job service for bpmn2 and
springboot support
* fix reproducible failure
* fix in memory services
* fix usertasks in memory for integration tests
* fix bom
* fix formatting
---
.../services/jobs/impl/InMemoryJobService.java | 2 +
.../org/jbpm/bpmn2/xml/AbstractNodeHandler.java | 17 +++---
kogito-bom/pom.xml | 62 ++++++++++++++++------
.../org/kie/kogito/codegen/AbstractCodegenIT.java | 23 +++++++-
.../springboot/SpringBootJPAUserTaskInstances.java | 2 +
5 files changed, 82 insertions(+), 24 deletions(-)
diff --git
a/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryJobService.java
b/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryJobService.java
index d3dc0c3b23..87bdd5465b 100644
---
a/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryJobService.java
+++
b/api/kogito-services/src/main/java/org/kie/kogito/services/jobs/impl/InMemoryJobService.java
@@ -115,6 +115,8 @@ public class InMemoryJobService implements JobsService,
AutoCloseable {
}
public void clearJobExecutorFactories() {
+ scheduledJobs.values().forEach(v -> v.cancel(true));
+ scheduledJobs.clear();
jobExecutorFactories.clear();
}
}
diff --git
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
index 7dd59a78d3..91f850e25b 100755
--- a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
+++ b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.UUID;
import java.util.function.Function;
import java.util.regex.Matcher;
@@ -614,19 +613,21 @@ public abstract class AbstractNodeHandler extends
BaseAbstractHandler implements
language = element.getAttribute("language");
}
String source = from.get().getTextContent();
+ String sourceId = from.get().getAttribute("id");
String target = to.get().getTextContent();
+ String targetId = to.get().getAttribute("id");
if (!language.isEmpty()) {
- assignments.add(new Assignment(language,
toDataExpression(source), toDataExpression(target)));
+ assignments.add(new Assignment(language,
toDataExpression(sourceId, source), toDataExpression(targetId, target)));
} else {
source = cleanUp(source);
target = cleanUp(target);
- DataDefinition sourceDataSpec = isExpr(source) ?
toDataExpression(source) : sourceResolver.apply(source);
+ DataDefinition sourceDataSpec = isExpr(source) ?
toDataExpression(sourceId, source) : sourceResolver.apply(source);
if (sourceDataSpec == null) {
- sourceDataSpec = toDataExpression(source); // it is
constant source
+ sourceDataSpec = toDataExpression(sourceId, source); // it
is constant source
}
- DataDefinition targetDataSpec = isExpr(target) ?
toDataExpression(target) : targetResolver.apply(target);
+ DataDefinition targetDataSpec = isExpr(target) ?
toDataExpression(targetId, target) : targetResolver.apply(target);
if (targetDataSpec == null) {
- targetDataSpec = toDataExpression(target);
+ targetDataSpec = toDataExpression(targetId, target);
}
logger.debug("No language set for assignment {} to {}.
Applying heuristics", sourceDataSpec, targetDataSpec);
assignments.add(new Assignment(language.isEmpty() ? null :
language, sourceDataSpec, targetDataSpec));
@@ -648,8 +649,8 @@ public abstract class AbstractNodeHandler extends
BaseAbstractHandler implements
return temp.contains(".") ? expression : temp;
}
- private DataDefinition toDataExpression(String expression) {
- DataDefinition dataSpec = new
DataDefinition(UUID.randomUUID().toString(), "EXPRESSION (" + expression + ")",
(String) null);
+ private DataDefinition toDataExpression(String id, String expression) {
+ DataDefinition dataSpec = new DataDefinition(id, "EXPRESSION (" +
expression + ")", (String) null);
dataSpec.setExpression(expression);
return dataSpec;
}
diff --git a/kogito-bom/pom.xml b/kogito-bom/pom.xml
index 117cd63aec..1e9de6895c 100755
--- a/kogito-bom/pom.xml
+++ b/kogito-bom/pom.xml
@@ -1841,7 +1841,39 @@
<classifier>sources</classifier>
</dependency>
- <!-- Flyway Add-on-->
+ <!-- Jobs -->
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>jobs-common-embedded</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kogito-addons-common-embedded-jobs-jpa</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kogito-addons-quarkus-embedded-jobs-jpa</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+
<artifactId>kogito-addons-springboot-embedded-jobs-jpa</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kogito-addons-quarkus-embedded-jobs</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kogito-addons-springboot-embedded-jobs</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <!-- Flyway Add-on-->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-flyway</artifactId>
@@ -1887,14 +1919,14 @@
<classifier>sources</classifier>
</dependency>
- <!-- drools -->
+ <!-- drools -->
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-drools</artifactId>
<version>${project.version}</version>
</dependency>
- <!-- DMN -->
+ <!-- DMN -->
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-dmn</artifactId>
@@ -1914,7 +1946,7 @@
<scope>test</scope>
</dependency>
- <!-- PMML -->
+ <!-- PMML -->
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-pmml-api-dependencies</artifactId>
@@ -1957,7 +1989,7 @@
<type>pom</type>
</dependency>
- <!-- Scenario Simulation Runner -->
+ <!-- Scenario Simulation Runner -->
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-scenario-simulation</artifactId>
@@ -1977,7 +2009,7 @@
<scope>test</scope>
</dependency>
- <!-- jbpm -->
+ <!-- jbpm -->
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>jbpm-deps-group-bpmn2-compiler</artifactId>
@@ -2418,7 +2450,7 @@
<classifier>sources</classifier>
</dependency>
- <!-- spring boot starter -->
+ <!-- spring boot starter -->
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-with-drools-spring-boot-starter</artifactId>
@@ -2451,7 +2483,7 @@
<version>${project.version}</version>
</dependency>
- <!-- Quarkus extension -->
+ <!-- Quarkus extension -->
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-with-drools-quarkus</artifactId>
@@ -2484,7 +2516,7 @@
<artifactId>drools-quarkus-decisions-deployment</artifactId>
<version>${project.version}</version>
<exclusions>
- <!--
+ <!--
Required for Gradle + Quarkus compat. See:
https://github.com/quarkusio/quarkus/pull/19307
https://quarkusio.zulipchat.com/#narrow/stream/187038-dev/topic/Gradle.20Kogito.20debugging
@@ -2616,7 +2648,7 @@
<version>${project.version}</version>
</dependency>
- <!-- Data Index extension -->
+ <!-- Data Index extension -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kogito-addons-quarkus-data-index-persistence-common-runtime</artifactId>
@@ -2816,7 +2848,7 @@
<classifier>sources</classifier>
</dependency>
- <!-- Tracing -->
+ <!-- Tracing -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-tracing-api</artifactId>
@@ -2862,7 +2894,7 @@
<classifier>sources</classifier>
</dependency>
- <!-- Explainability -->
+ <!-- Explainability -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-explainability</artifactId>
@@ -2910,7 +2942,7 @@
<classifier>sources</classifier>
</dependency>
- <!-- event-driven decisions -->
+ <!-- event-driven decisions -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-events-decisions</artifactId>
@@ -2956,7 +2988,7 @@
<classifier>sources</classifier>
</dependency>
- <!-- event-driven predictions -->
+ <!-- event-driven predictions -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-events-predictions</artifactId>
@@ -3002,7 +3034,7 @@
<classifier>sources</classifier>
</dependency>
- <!-- event-driven rules -->
+ <!-- event-driven rules -->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-addons-events-rules</artifactId>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/AbstractCodegenIT.java
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/AbstractCodegenIT.java
index 0aa9e44686..b65b13e951 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/AbstractCodegenIT.java
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/AbstractCodegenIT.java
@@ -47,6 +47,12 @@ import org.kie.kogito.codegen.core.ApplicationGenerator;
import org.kie.kogito.codegen.core.io.CollectedResourceProducer;
import org.kie.kogito.codegen.process.ProcessCodegen;
import org.kie.kogito.codegen.usertask.UserTaskCodegen;
+import org.kie.kogito.process.ProcessConfig;
+import org.kie.kogito.process.Processes;
+import org.kie.kogito.services.jobs.impl.InMemoryJobContext;
+import org.kie.kogito.services.jobs.impl.InMemoryProcessJobExecutorFactory;
+import org.kie.kogito.services.jobs.impl.InMemoryUserTaskJobExecutorFactory;
+import org.kie.kogito.usertask.UserTasks;
import org.kie.memorycompiler.CompilationResult;
import org.kie.memorycompiler.JavaCompiler;
import org.kie.memorycompiler.JavaCompilerFactory;
@@ -55,6 +61,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.assertj.core.api.Assertions.assertThat;
+import static
org.kie.kogito.services.jobs.impl.StaticJobService.staticJobService;
public abstract class AbstractCodegenIT {
@@ -205,7 +212,21 @@ public abstract class AbstractCodegenIT {
@SuppressWarnings("unchecked")
Class<Application> app = (Class<Application>)
Class.forName(context.getPackageName() + ".Application", true, classloader);
- return app.getDeclaredConstructor().newInstance();
+ Application application = app.getDeclaredConstructor().newInstance();
+
+ initTimer(application);
+
+ return application;
+ }
+
+ private void initTimer(Application app) {
+ Processes processes = app.get(Processes.class);
+ UserTasks userTasks = app.get(UserTasks.class);
+ ProcessConfig config = app.config().get(ProcessConfig.class);
+ InMemoryJobContext context = new InMemoryJobContext(null,
config.unitOfWorkManager(), processes, userTasks);
+ staticJobService().clearJobExecutorFactories();
+ staticJobService().registerJobExecutorFactory(new
InMemoryProcessJobExecutorFactory(context));
+ staticJobService().registerJobExecutorFactory(new
InMemoryUserTaskJobExecutorFactory(context));
}
protected KogitoBuildContext newContext() {
diff --git
a/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootJPAUserTaskInstances.java
b/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootJPAUserTaskInstances.java
index fea4b17095..255e6b5784 100644
---
a/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootJPAUserTaskInstances.java
+++
b/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootJPAUserTaskInstances.java
@@ -18,8 +18,10 @@
*/
package org.jbpm.usertask.jpa.springboot;
+
import java.util.List;
import java.util.Optional;
+
import org.jbpm.usertask.jpa.JPAUserTaskInstances;
import org.jbpm.usertask.jpa.mapper.UserTaskInstanceEntityMapper;
import org.jbpm.usertask.jpa.repository.UserTaskInstanceRepository;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]