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]

Reply via email to