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 d60fce10f3 [incubator-kie-issues#1996]
CodegenNodeInstanceFactoryRegistry is created more than once if the environment
is specified (#3946)
d60fce10f3 is described below
commit d60fce10f366f81b8344479b3ea7634bfe51b590
Author: Pere Fernández <[email protected]>
AuthorDate: Mon Jun 9 09:42:31 2025 +0200
[incubator-kie-issues#1996] CodegenNodeInstanceFactoryRegistry is created
more than once if the environment is specified (#3946)
---
.../process/instance/DummyKnowledgeRuntime.java | 3 ++-
.../instance/impl/NodeInstanceFactoryRegistry.java | 31 +++++++++++++++-------
2 files changed, 23 insertions(+), 11 deletions(-)
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/DummyKnowledgeRuntime.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/DummyKnowledgeRuntime.java
index 6f1bbb35ab..ee457ac418 100644
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/DummyKnowledgeRuntime.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/DummyKnowledgeRuntime.java
@@ -63,6 +63,7 @@ import org.kie.kogito.jobs.JobsService;
import org.kie.kogito.process.ProcessConfig;
import static
org.jbpm.process.core.constants.CalendarConstants.BUSINESS_CALENDAR_ENVIRONMENT_KEY;
+import static
org.jbpm.workflow.instance.impl.NodeInstanceFactoryRegistry.NODE_INSTANCE_FACTORY_REGISTRY_KEY;
/**
* A severely limited implementation of the WorkingMemory interface.
@@ -81,7 +82,7 @@ class DummyKnowledgeRuntime implements
InternalKnowledgeRuntime, KogitoProcessRu
if (Objects.nonNull(calendar)) {
environment.set(BUSINESS_CALENDAR_ENVIRONMENT_KEY, calendar);
}
- environment.set("NodeInstanceFactoryRegistry", new
CodegenNodeInstanceFactoryRegistry());
+ environment.set(NODE_INSTANCE_FACTORY_REGISTRY_KEY,
CodegenNodeInstanceFactoryRegistry.class.getName());
}
@Override
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceFactoryRegistry.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceFactoryRegistry.java
index 72b48b9c05..42d385f94b 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceFactoryRegistry.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceFactoryRegistry.java
@@ -18,10 +18,7 @@
*/
package org.jbpm.workflow.instance.impl;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
+import java.util.*;
import org.jbpm.util.JbpmClassLoaderUtil;
import org.kie.api.definition.process.Node;
@@ -30,18 +27,32 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NodeInstanceFactoryRegistry {
+ public static final String NODE_INSTANCE_FACTORY_REGISTRY_KEY =
"NodeInstanceFactoryRegistry";
+
private static final Logger LOGGER =
LoggerFactory.getLogger(NodeInstanceFactoryRegistry.class);
private static final NodeInstanceFactoryRegistry INSTANCE = new
NodeInstanceFactoryRegistry();
- private Map<Class<? extends Node>, NodeInstanceFactory> registry;
+ private static final Map<String, NodeInstanceFactoryRegistry>
LOADED_NODE_INSTANCE_FACTORY_REGISTRIES = new HashMap<>();
+
+ private final Map<Class<? extends Node>, NodeInstanceFactory> registry;
public static NodeInstanceFactoryRegistry getInstance(Environment
environment) {
- // allow custom NodeInstanceFactoryRegistry to be given as part of the
environment - e.g simulation
- if (environment != null &&
environment.get("NodeInstanceFactoryRegistry") != null) {
- return (NodeInstanceFactoryRegistry)
environment.get("NodeInstanceFactoryRegistry");
- }
+ return getFactoryRegistryFromEnvironment(environment).orElse(INSTANCE);
+ }
- return INSTANCE;
+ private static Optional<NodeInstanceFactoryRegistry>
getFactoryRegistryFromEnvironment(Environment environment) {
+ if (environment != null &&
environment.get(NODE_INSTANCE_FACTORY_REGISTRY_KEY) != null) {
+ String factoryRegistryClassName = (String)
environment.get(NODE_INSTANCE_FACTORY_REGISTRY_KEY);
+ return
Optional.of(LOADED_NODE_INSTANCE_FACTORY_REGISTRIES.computeIfAbsent(factoryRegistryClassName,
+ className -> {
+ try {
+ return (NodeInstanceFactoryRegistry)
Class.forName(className, true,
JbpmClassLoaderUtil.findClassLoader()).getConstructor().newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException("Could not create an
instance of NodeInstanceFactoryRegistry with java type '" + className + "'", e);
+ }
+ }));
+ }
+ return Optional.empty();
}
protected NodeInstanceFactoryRegistry() {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]