This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti 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 2ff45a4313 [Fix #3628] Avoiding concurrency issues with Instance and
ServiceLoader (#3632)
2ff45a4313 is described below
commit 2ff45a4313861ea48ed2aee937036266604a5247
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Thu Aug 22 18:39:58 2024 +0200
[Fix #3628] Avoiding concurrency issues with Instance and ServiceLoader
(#3632)
---
.../process/dynamic/ProcessInstanceDynamicCallHelper.java | 6 +++---
.../kie/kogito/process/expr/ExpressionHandlerFactory.java | 9 ++++++---
.../dynamic/ProcessInstanceDynamicCallsResource.java | 14 ++++++++++----
3 files changed, 19 insertions(+), 10 deletions(-)
diff --git
a/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallHelper.java
b/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallHelper.java
index f4315135fb..7c52c174aa 100644
---
a/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallHelper.java
+++
b/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallHelper.java
@@ -18,9 +18,9 @@
*/
package org.kie.kogito.process.dynamic;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import java.util.stream.Stream;
import org.drools.core.common.InternalKnowledgeRuntime;
import org.jbpm.process.instance.InternalProcessRuntime;
@@ -41,8 +41,8 @@ public class ProcessInstanceDynamicCallHelper {
private ProcessInstanceDynamicCallHelper() {
}
- public static void executeRestCall(RestWorkItemHandler handler,
Stream<Process<?>> processes, String processId, String processInstanceId,
RestCallInfo input) {
- Process<?> processDef = processes.filter(p ->
p.id().equals(processId)).findAny().orElseThrow(() -> new
IllegalArgumentException("Cannot find process " + processId));
+ public static void executeRestCall(RestWorkItemHandler handler,
Collection<Process<?>> processes, String processId, String processInstanceId,
RestCallInfo input) {
+ Process<?> processDef = processes.stream().filter(p ->
p.id().equals(processId)).findAny().orElseThrow(() -> new
IllegalArgumentException("Cannot find process " + processId));
WorkflowProcessInstance pi = (WorkflowProcessInstance)
findProcessInstance(processDef, processInstanceId);
WorkflowProcessImpl process = (WorkflowProcessImpl) pi.getProcess();
if (!process.isDynamic()) {
diff --git
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/expr/ExpressionHandlerFactory.java
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/expr/ExpressionHandlerFactory.java
index af66edf6e9..3becf03a8a 100644
---
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/expr/ExpressionHandlerFactory.java
+++
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/expr/ExpressionHandlerFactory.java
@@ -18,15 +18,18 @@
*/
package org.kie.kogito.process.expr;
+import java.util.Collection;
import java.util.Optional;
import java.util.ServiceLoader;
+import java.util.stream.Collectors;
public class ExpressionHandlerFactory {
private ExpressionHandlerFactory() {
}
- private static final ServiceLoader<ExpressionHandler> serviceLoader =
ServiceLoader.load(ExpressionHandler.class);
+ private static final Collection<ExpressionHandler> expressionHandlers =
ServiceLoader.load(ExpressionHandler.class).stream()
+
.map(ServiceLoader.Provider::get).collect(Collectors.toUnmodifiableList());
public static Expression get(String lang, String expr) {
return getExpressionHandler(lang).orElseThrow(
@@ -34,10 +37,10 @@ public class ExpressionHandlerFactory {
}
public static boolean isSupported(String lang) {
- return serviceLoader.stream().anyMatch(p ->
p.get().lang().equals(lang));
+ return
expressionHandlers.stream().map(ExpressionHandler::lang).anyMatch(lang::equals);
}
private static Optional<ExpressionHandler> getExpressionHandler(String
lang) {
- return serviceLoader.stream().filter(p ->
p.get().lang().equals(lang)).findFirst().map(p -> p.get());
+ return expressionHandlers.stream().filter(p ->
p.lang().equals(lang)).findFirst();
}
}
diff --git
a/quarkus/addons/dynamic/runtime/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallsResource.java
b/quarkus/addons/dynamic/runtime/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallsResource.java
index 6729a5c1ac..7ff60f5248 100644
---
a/quarkus/addons/dynamic/runtime/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallsResource.java
+++
b/quarkus/addons/dynamic/runtime/src/main/java/org/kie/kogito/process/dynamic/ProcessInstanceDynamicCallsResource.java
@@ -18,6 +18,9 @@
*/
package org.kie.kogito.process.dynamic;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
import org.kie.kogito.process.Process;
import org.kogito.workitem.rest.RestWorkItemHandler;
@@ -39,13 +42,17 @@ import jakarta.ws.rs.core.Response;
@Path("/_dynamic")
public class ProcessInstanceDynamicCallsResource {
- @Inject
- Instance<Process<?>> processes;
@Inject
Vertx vertx;
@Inject
WebClientOptions sslOptions;
private RestWorkItemHandler handler;
+ private Collection<Process<?>> processes;
+
+ @Inject
+ ProcessInstanceDynamicCallsResource(Instance<Process<?>> processes) {
+ this.processes =
processes.stream().collect(Collectors.toUnmodifiableList());
+ }
@PostConstruct
void init() {
@@ -57,8 +64,7 @@ public class ProcessInstanceDynamicCallsResource {
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{processId}/{processInstanceId}/rest")
public Response executeRestCall(@PathParam("processId") String processId,
@PathParam("processInstanceId") String processInstanceId, RestCallInfo input) {
- ProcessInstanceDynamicCallHelper.executeRestCall(handler,
processes.stream(), processId, processInstanceId, input);
+ ProcessInstanceDynamicCallHelper.executeRestCall(handler, processes,
processId, processInstanceId, input);
return Response.status(200).build();
}
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]