This is an automated email from the ASF dual-hosted git repository.
gitgabrio 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 f6f2892a57 [incubator-kie-issues#1806] Manage custom DMN profiles from
dependencies (#3842)
f6f2892a57 is described below
commit f6f2892a571285d9f2b88df3fe81da3086f758b8
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Wed Feb 12 10:45:34 2025 +0100
[incubator-kie-issues#1806] Manage custom DMN profiles from dependencies
(#3842)
* [incubator-kie-issues#1806] Manage custom DMN profiles from dependencies
* [incubator-kie-issues#1806] Fix format
* [incubator-kie-issues#1806] Exposing DMNProfiles from DmnDecisionModel.
Use context classloader for class discovery
---------
Co-authored-by: Gabriele-Cardosi <[email protected]>
---
.../explainability/ExplainabilityServiceTest.java | 3 +-
.../org/kie/kogito/dmn/AbstractDecisionModels.java | 5 +-
.../main/java/org/kie/kogito/dmn/DMNKogito.java | 8 +-
.../java/org/kie/kogito/dmn/DmnDecisionModel.java | 7 ++
.../java/org/kie/kogito/dmn/DMNKogitoTest.java | 5 +-
.../java/org/kie/kogito/dmn/DecisionTestUtils.java | 3 +-
.../kogito/codegen/decision/DecisionCodegen.java | 45 ++++++++-
.../decision/DecisionContainerGenerator.java | 42 ++++++--
.../kogito/codegen/decision/CodegenUtilsTest.java | 2 +-
.../codegen/decision/DecisionCodegenTest.java | 43 ++++++++
.../decision/DecisionContainerGeneratorTest.java | 112 +++++++++++++++++++++
.../decision/test/customprofiles/Profile_0.java | 45 +++++++++
.../decision/test/customprofiles/Profile_1.java | 45 +++++++++
.../decision/test/customprofiles/Profile_2.java | 45 +++++++++
.../workflow/parser/types/DMNTypeHandler.java | 3 +-
.../kie/kogito/explainability/ApplicationMock.java | 3 +-
.../BaseSpringBootDecisionTracingTest.java | 3 +-
17 files changed, 397 insertions(+), 22 deletions(-)
diff --git
a/addons/common/explainability/src/test/java/org/kie/kogito/explainability/ExplainabilityServiceTest.java
b/addons/common/explainability/src/test/java/org/kie/kogito/explainability/ExplainabilityServiceTest.java
index 73d86d144b..1e2800ac17 100644
---
a/addons/common/explainability/src/test/java/org/kie/kogito/explainability/ExplainabilityServiceTest.java
+++
b/addons/common/explainability/src/test/java/org/kie/kogito/explainability/ExplainabilityServiceTest.java
@@ -19,6 +19,7 @@
package org.kie.kogito.explainability;
import java.io.InputStreamReader;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -43,7 +44,7 @@ public class ExplainabilityServiceTest {
public static final String MODEL_NAME = "Traffic Violation";
final static String TEST_EXECUTION_ID = "test";
- final static DMNRuntime genericDMNRuntime =
DMNKogito.createGenericDMNRuntime(new InputStreamReader(
+ final static DMNRuntime genericDMNRuntime =
DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new InputStreamReader(
ExplainabilityServiceTest.class.getResourceAsStream(MODEL_RESOURCE)));
final static DmnDecisionModelSpy decisionModel = new
DmnDecisionModelSpy(genericDMNRuntime, MODEL_NAMESPACE, MODEL_NAME, () ->
TEST_EXECUTION_ID);
diff --git
a/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/AbstractDecisionModels.java
b/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/AbstractDecisionModels.java
index e0fe0eb67e..00d03a8c78 100644
---
a/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/AbstractDecisionModels.java
+++
b/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/AbstractDecisionModels.java
@@ -21,9 +21,11 @@ package org.kie.kogito.dmn;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
+import java.util.Set;
import java.util.function.BiFunction;
import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.core.compiler.DMNProfile;
import org.kie.kogito.Application;
import org.kie.kogito.ExecutionIdSupplier;
import org.kie.kogito.KogitoGAV;
@@ -45,9 +47,10 @@ public abstract class AbstractDecisionModels implements
DecisionModels {
protected static void init(ExecutionIdSupplier executionIdSupplier,
BiFunction<DecisionModel, KogitoGAV, DecisionModel>
decisionModelTransformerInit,
+ Set<DMNProfile> customDMNProfiles,
Reader... readers) {
DMNKogitoCallbacks.beforeAbstractDecisionModelsInit(executionIdSupplier,
decisionModelTransformerInit, readers);
- dmnRuntime = DMNKogito.createGenericDMNRuntime(readers);
+ dmnRuntime = DMNKogito.createGenericDMNRuntime(customDMNProfiles,
readers);
execIdSupplier = executionIdSupplier;
decisionModelTransformer = decisionModelTransformerInit;
DMNKogitoCallbacks.afterAbstractDecisionModelsInit(dmnRuntime);
diff --git a/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DMNKogito.java
b/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DMNKogito.java
index 9905a4b6d5..ae819b7af7 100644
--- a/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DMNKogito.java
+++ b/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DMNKogito.java
@@ -21,6 +21,7 @@ package org.kie.kogito.dmn;
import java.io.Reader;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -28,6 +29,7 @@ import org.drools.io.ReaderResource;
import org.kie.api.io.Resource;
import org.kie.dmn.api.core.DMNModel;
import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.core.compiler.DMNProfile;
import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
import org.kie.dmn.core.impl.DMNRuntimeImpl;
import org.kie.dmn.core.internal.utils.DMNEvaluationUtils;
@@ -53,11 +55,13 @@ public class DMNKogito {
* Use {@link Application#decisionModels()} of Kogito API to
programmatically access DMN assets and evaluate DMN
* decisions.
*/
- public static DMNRuntime createGenericDMNRuntime(Reader... readers) {
+ public static DMNRuntime createGenericDMNRuntime(Set<DMNProfile>
customDMNProfiles, Reader... readers) {
DMNKogitoCallbacks.beforeCreateGenericDMNRuntime(readers);
List<Resource> resources =
Stream.of(readers).map(ReaderResource::new).collect(Collectors.toList());
EvalHelper.clearGenericAccessorCache(); // KOGITO-3325 DMN hot reload
manage accessor cache when stronglytyped
- DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
+ DMNRuntimeBuilder dmnRuntimeBuilder = DMNRuntimeBuilder.fromDefaults();
+ customDMNProfiles.forEach(dmnRuntimeBuilder::addProfile);
+ DMNRuntime dmnRuntime = dmnRuntimeBuilder
.buildConfiguration()
.fromResources(resources)
.getOrElseThrow(e -> new RuntimeException("Error initializing
DMNRuntime", e));
diff --git
a/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DmnDecisionModel.java
b/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DmnDecisionModel.java
index f6d653af08..b6f324acc7 100644
--- a/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DmnDecisionModel.java
+++ b/drools/kogito-dmn/src/main/java/org/kie/kogito/dmn/DmnDecisionModel.java
@@ -19,6 +19,7 @@
package org.kie.kogito.dmn;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import org.kie.dmn.api.core.DMNContext;
@@ -26,6 +27,8 @@ import org.kie.dmn.api.core.DMNModel;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.DMNRuntime;
import org.kie.dmn.api.core.FEELPropertyAccessible;
+import org.kie.dmn.core.compiler.DMNProfile;
+import org.kie.dmn.core.impl.DMNRuntimeImpl;
import org.kie.kogito.ExecutionIdSupplier;
import org.kie.kogito.decision.DecisionExecutionIdUtils;
import org.kie.kogito.decision.DecisionModel;
@@ -79,4 +82,8 @@ public class DmnDecisionModel implements DecisionModel {
public DMNModel getDMNModel() {
return dmnModel;
}
+
+ public List<DMNProfile> getProfiles() {
+ return Collections.unmodifiableList(((DMNRuntimeImpl)
dmnRuntime).getProfiles());
+ }
}
diff --git
a/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DMNKogitoTest.java
b/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DMNKogitoTest.java
index 7e250e05d6..48572fac50 100644
--- a/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DMNKogitoTest.java
+++ b/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DMNKogitoTest.java
@@ -19,6 +19,7 @@
package org.kie.kogito.dmn;
import java.io.InputStreamReader;
+import java.util.Collections;
import org.junit.jupiter.api.Test;
import org.kie.dmn.api.core.DMNMessage.Severity;
@@ -32,7 +33,7 @@ public class DMNKogitoTest {
@Test
public void testBasic() {
- DMNRuntime dmnRuntime = DMNKogito.createGenericDMNRuntime(new
InputStreamReader(DMNKogitoTest.class.getResourceAsStream("TrafficViolation.dmn")));
+ DMNRuntime dmnRuntime =
DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new
InputStreamReader(DMNKogitoTest.class.getResourceAsStream("TrafficViolation.dmn")));
assertThat(dmnRuntime.getModels()).hasSize(1);
final String TRAFFIC_VIOLATION_NS =
"https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF";
@@ -45,7 +46,7 @@ public class DMNKogitoTest {
@Test
public void testProfile() {
- DMNRuntime dmnRuntime = DMNKogito.createGenericDMNRuntime(new
InputStreamReader(DMNKogitoTest.class.getResourceAsStream("profile.dmn")));
+ DMNRuntime dmnRuntime =
DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new
InputStreamReader(DMNKogitoTest.class.getResourceAsStream("profile.dmn")));
assertThat(dmnRuntime.getModels()).hasSize(1);
DMNModel dmnModel = dmnRuntime.getModels().get(0);
diff --git
a/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DecisionTestUtils.java
b/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DecisionTestUtils.java
index b303e63c6b..bd6bda1549 100644
--- a/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DecisionTestUtils.java
+++ b/drools/kogito-dmn/src/test/java/org/kie/kogito/dmn/DecisionTestUtils.java
@@ -18,6 +18,7 @@
*/
package org.kie.kogito.dmn;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -58,7 +59,7 @@ public class DecisionTestUtils {
private static final int VIOLATION_SPEED_LIMIT_VALUE_100 = 100;
public static DMNRuntime createDMNRuntime() {
- return DMNKogito.createGenericDMNRuntime(new java.io.InputStreamReader(
+ return DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new
java.io.InputStreamReader(
DecisionTestUtils.class.getResourceAsStream(MODEL_RESOURCE)));
}
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
index de95c7c77e..d77d422ca1 100644
---
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
@@ -22,10 +22,12 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
+import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -38,6 +40,7 @@ import org.kie.dmn.api.core.DMNModel;
import org.kie.dmn.api.core.DMNRuntime;
import org.kie.dmn.api.marshalling.DMNMarshaller;
import org.kie.dmn.backend.marshalling.v1x.DMNMarshallerFactory;
+import org.kie.dmn.core.compiler.DMNProfile;
import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
import org.kie.dmn.feel.codegen.feel11.CodegenStringUtil;
import org.kie.dmn.model.api.BusinessKnowledgeModel;
@@ -65,6 +68,7 @@ import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import static java.util.stream.Collectors.toList;
+import static
org.kie.dmn.core.assembler.DMNAssemblerService.DMN_PROFILE_PREFIX;
import static
org.kie.kogito.codegen.decision.CodegenUtils.getDefinitionsFileFromModel;
public class DecisionCodegen extends AbstractGenerator {
@@ -105,7 +109,8 @@ public class DecisionCodegen extends AbstractGenerator {
public static final String KOGITO_ADDON_TRACING_DECISION_ASYNC_ENABLED =
"kogito.addon.tracing.decision.asyncEnabled";
public static DecisionCodegen ofCollectedResources(KogitoBuildContext
context, Collection<CollectedResource> resources) {
- OASFactoryResolver.instance(); // manually invoke SPI, o/w Kogito
CodeGen Kogito Quarkus extension failure at NewFileHotReloadTest due to
java.util.ServiceConfigurationError:
org.eclipse.microprofile.openapi.spi.OASFactoryResolver:
io.smallrye.openapi.spi.OASFactoryResolverImpl not a subtype
+ OASFactoryResolver.instance(); // manually invoke SPI, o/w Kogito
CodeGen Kogito Quarkus extension failure at NewFileHotReloadTest due to
java.util.ServiceConfigurationError: org.eclipse
+ // .microprofile.openapi.spi.OASFactoryResolver:
io.smallrye.openapi.spi.OASFactoryResolverImpl not a subtype
List<CollectedResource> dmnResources = resources.stream()
.filter(r -> r.resource().getResourceType() ==
ResourceType.DMN)
.collect(toList());
@@ -123,9 +128,12 @@ public class DecisionCodegen extends AbstractGenerator {
private final List<DMNResource> resources = new ArrayList<>();
private final List<GeneratedFile> generatedFiles = new ArrayList<>();
private final List<String> classesForManualReflection = new ArrayList<>();
+ private final Set<DMNProfile> customDMNProfiles = new HashSet<>();
public DecisionCodegen(KogitoBuildContext context, List<CollectedResource>
cResources) {
super(context, GENERATOR_NAME, new DecisionConfigGenerator(context));
+ Set<String> customDMNProfilesProperties =
getCustomDMNProfilesProperties();
+
customDMNProfiles.addAll(getCustomDMNProfiles(customDMNProfilesProperties,
context.getClassLoader()));
this.cResources = cResources;
}
@@ -134,7 +142,9 @@ public class DecisionCodegen extends AbstractGenerator {
// First, we perform static validation on directly the XML
DecisionValidation.dmnValidateResources(context(), r2cr.keySet());
// DMN model processing; any semantic error during compilation will
also be thrown accordingly
- DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
+ DMNRuntimeBuilder dmnRuntimeBuilder = DMNRuntimeBuilder.fromDefaults();
+ customDMNProfiles.forEach(dmnRuntimeBuilder::addProfile);
+ DMNRuntime dmnRuntime = dmnRuntimeBuilder
.setRootClassLoader(context().getClassLoader()) // KOGITO-4788
.buildConfiguration()
.fromResources(r2cr.keySet())
@@ -159,6 +169,34 @@ public class DecisionCodegen extends AbstractGenerator {
return cResources.isEmpty();
}
+ Set<String> getCustomDMNProfilesProperties() {
+ Map<String, String> propertiesMap = this.context().getPropertiesMap();
+ return propertiesMap.entrySet().stream()
+ .filter(stringStringEntry ->
stringStringEntry.getKey().startsWith(DMN_PROFILE_PREFIX))
+ .map(Entry::getValue)
+ .collect(Collectors.toSet());
+ }
+
+ static Set<DMNProfile> getCustomDMNProfiles(Set<String> customDMNProfiles,
ClassLoader classLoader) {
+ Set<DMNProfile> toReturn = new HashSet<>();
+ for (String profileName : customDMNProfiles) {
+ Class<? extends DMNProfile> profileClass = null;
+ try {
+ profileClass =
classLoader.loadClass(profileName).asSubclass(DMNProfile.class);
+ } catch (Exception e) {
+ LOGGER.warn("Unable to load DMN profile {} from classloader.",
profileName);
+ }
+ if (profileClass != null) {
+ try {
+
toReturn.add(profileClass.getDeclaredConstructor().newInstance());
+ } catch (Exception e) {
+ LOGGER.warn("Unable to instantiate DMN profile {}",
profileName, e);
+ }
+ }
+ }
+ return toReturn;
+ }
+
private void generateAndStoreRestResources() {
List<DecisionRestResourceGenerator> rgs = new ArrayList<>(); // REST
resources
List<DMNModel> models =
resources.stream().map(DMNResource::getDmnModel).collect(Collectors.toList());
@@ -315,7 +353,8 @@ public class DecisionCodegen extends AbstractGenerator {
context(),
applicationCanonicalName(),
this.cResources,
- this.classesForManualReflection));
+ this.classesForManualReflection,
+ this.customDMNProfiles));
}
@Override
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
index 895dc0272d..3dfb0a20bd 100644
---
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
@@ -21,24 +21,31 @@ package org.kie.kogito.codegen.decision;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
+import org.kie.dmn.core.compiler.DMNProfile;
import org.kie.kogito.codegen.api.context.KogitoBuildContext;
import org.kie.kogito.codegen.api.io.CollectedResource;
import org.kie.kogito.codegen.api.template.InvalidTemplateException;
import org.kie.kogito.codegen.api.template.TemplatedGenerator;
import org.kie.kogito.codegen.core.AbstractApplicationSection;
+import org.kie.kogito.codegen.core.CodegenUtils;
import org.kie.kogito.dmn.DmnExecutionIdSupplier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.InitializerDeclaration;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.NullLiteralExpr;
+import com.github.javaparser.ast.expr.SimpleName;
import com.github.javaparser.ast.expr.StringLiteralExpr;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
@@ -50,14 +57,17 @@ public class DecisionContainerGenerator extends
AbstractApplicationSection {
private static final Logger LOG =
LoggerFactory.getLogger(DecisionContainerGenerator.class);
protected static final String PMML_ABSTRACT_CLASS =
"org.kie.kogito.pmml.AbstractPredictionModels";
protected static final String PMML_FUNCTION = PMML_ABSTRACT_CLASS +
".kieRuntimeFactoryFunction";
+ static final String MONITORED_DECISIONMODEL_TRANSFORMER =
"org.kie.kogito.monitoring.core.common.decision.MonitoredDecisionModelTransformer";
private static final String SECTION_CLASS_NAME = "DecisionModels";
private final String applicationCanonicalName;
private final Collection<CollectedResource> resources;
private final TemplatedGenerator templatedGenerator;
private final List<String> classesForManualReflection = new ArrayList<>();
+ private final Set<DMNProfile> customDMNProfiles = new HashSet<>();
- public DecisionContainerGenerator(KogitoBuildContext context, String
applicationCanonicalName, Collection<CollectedResource> cResources,
List<String> classesForManualReflection) {
+ public DecisionContainerGenerator(KogitoBuildContext context, String
applicationCanonicalName, Collection<CollectedResource> cResources,
List<String> classesForManualReflection,
+ Set<DMNProfile> customDMNProfiles) {
super(context, SECTION_CLASS_NAME);
this.applicationCanonicalName = applicationCanonicalName;
this.resources = cResources;
@@ -65,6 +75,7 @@ public class DecisionContainerGenerator extends
AbstractApplicationSection {
.withTargetTypeName(SECTION_CLASS_NAME)
.build(context, "DecisionContainer");
this.classesForManualReflection.addAll(classesForManualReflection);
+ this.customDMNProfiles.addAll(customDMNProfiles);
}
@Override
@@ -84,8 +95,9 @@ public class DecisionContainerGenerator extends
AbstractApplicationSection {
templatedGenerator,
"Missing init() method"));
- setupExecIdSupplierVariable(initMethod);
- setupDecisionModelTransformerVariable(initMethod);
+ setupExecIdSupplierVariable(initMethod,
context.getAddonsConfig().useTracing());
+ setupDecisionModelTransformerVariable(initMethod,
context.getAddonsConfig().useMonitoring());
+ setupCustomDMNProfiles(initMethod, customDMNProfiles);
for (CollectedResource resource : resources) {
Optional<String> encoding = determineEncoding(resource);
@@ -117,17 +129,31 @@ public class DecisionContainerGenerator extends
AbstractApplicationSection {
}
}
- private void setupExecIdSupplierVariable(MethodCallExpr initMethod) {
- Expression execIdSupplier = context.getAddonsConfig().useTracing() ?
newObject(DmnExecutionIdSupplier.class) : new NullLiteralExpr();
+ static void setupExecIdSupplierVariable(MethodCallExpr initMethod, boolean
useTracing) {
+ Expression execIdSupplier = useTracing ?
newObject(DmnExecutionIdSupplier.class) : new NullLiteralExpr();
initMethod.addArgument(execIdSupplier);
}
- private void setupDecisionModelTransformerVariable(MethodCallExpr
initMethod) {
- Expression decisionModelTransformerExpr =
- context.getAddonsConfig().useMonitoring() ?
newObject("org.kie.kogito.monitoring.core.common.decision.MonitoredDecisionModelTransformer")
: new NullLiteralExpr();
+ static void setupDecisionModelTransformerVariable(MethodCallExpr
initMethod, boolean useMonitoring) {
+ Expression decisionModelTransformerExpr = useMonitoring ?
newObject(MONITORED_DECISIONMODEL_TRANSFORMER) : new NullLiteralExpr();
initMethod.addArgument(decisionModelTransformerExpr);
}
+ static void setupCustomDMNProfiles(MethodCallExpr initMethod,
Set<DMNProfile> customDMNProfiles) {
+ NodeList<Expression> customDMNProfileArguments = new NodeList<>();
+ customDMNProfiles.stream()
+ .map(profile -> profile.getClass().getCanonicalName())
+ .map(CodegenUtils::newObject)
+ .forEach(customDMNProfileArguments::add);
+
+ MethodCallExpr setOfExpression = new MethodCallExpr();
+ SimpleName setName = new SimpleName(Set.class.getName());
+ setOfExpression.setScope(new NameExpr(setName));
+ setOfExpression.setName(new SimpleName("of"));
+ setOfExpression.setArguments(customDMNProfileArguments);
+ initMethod.addArgument(setOfExpression);
+ }
+
public List<String> getClassesForManualReflection() {
return classesForManualReflection;
}
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
index 599c49c222..f15a88d641 100644
---
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
@@ -83,7 +83,7 @@ class CodegenUtilsTest {
File dmnFile = FileUtils.getFile("Traffic Violation Simple.dmn");
assertNotNull(dmnFile);
assertTrue(dmnFile.exists());
- DMNRuntime dmnRuntime = DMNKogito.createGenericDMNRuntime(new
FileReader(dmnFile));
+ DMNRuntime dmnRuntime =
DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new
FileReader(dmnFile));
assertNotNull(dmnRuntime);
assertThat(dmnRuntime.getModels()).hasSize(1);
final DMNModel dmnModel =
dmnRuntime.getModel("https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF",
"Traffic Violation");
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCodegenTest.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCodegenTest.java
index 9e3a9438bb..94990cc0ec 100644
---
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCodegenTest.java
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCodegenTest.java
@@ -23,18 +23,23 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.Properties;
+import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import org.assertj.core.api.AbstractStringAssert;
import org.drools.codegen.common.GeneratedFile;
import org.drools.codegen.common.GeneratedFileType;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
+import org.kie.dmn.core.compiler.DMNProfile;
import org.kie.kogito.codegen.api.AddonsConfig;
import org.kie.kogito.codegen.api.ApplicationSection;
import org.kie.kogito.codegen.api.context.KogitoBuildContext;
@@ -53,12 +58,15 @@ import static java.util.Collections.singleton;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static
org.kie.dmn.core.assembler.DMNAssemblerService.DMN_PROFILE_PREFIX;
import static
org.kie.kogito.codegen.api.utils.KogitoContextTestUtils.mockClassAvailabilityResolver;
import static
org.kie.kogito.grafana.utils.GrafanaDashboardUtils.DISABLED_DOMAIN_DASHBOARDS;
import static
org.kie.kogito.grafana.utils.GrafanaDashboardUtils.DISABLED_OPERATIONAL_DASHBOARDS;
public class DecisionCodegenTest {
+ static final String CUSTOM_PROFILES_PACKAGE =
"org.kie.kogito.codegen.decision.test.customprofiles";
+
@ParameterizedTest
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#contextBuilders")
public void isEmpty(KogitoBuildContext.Builder contextBuilder) {
@@ -260,6 +268,33 @@ public class DecisionCodegenTest {
.doesNotContain(DecisionContainerGenerator.PMML_FUNCTION);
}
+ @ParameterizedTest
+
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#contextBuilders")
+ public void getCustomDMNProfilesProperties(KogitoBuildContext.Builder
contextBuilder) {
+ Properties properties = new Properties();
+ Set<String> dmnProfiles = new HashSet<>();
+ IntStream.range(0, 3).forEach(index -> {
+ String dmnProfileKey = String.format("%sProfile_%d",
DMN_PROFILE_PREFIX, index);
+ String dmnProfileValue = String.format("%s.Profile_%d",
CUSTOM_PROFILES_PACKAGE, index);
+ properties.put(dmnProfileKey, dmnProfileValue);
+ dmnProfiles.add(dmnProfileValue);
+ });
+ DecisionCodegen codeGenerator =
getDecisionCodegen("src/test/resources/decision/models/vacationDays",
contextBuilder, properties);
+ Set<String> retrieved = codeGenerator.getCustomDMNProfilesProperties();
+ assertThat(retrieved).containsExactlyInAnyOrderElementsOf(dmnProfiles);
+ }
+
+ @Test
+ public void getCustomDMNProfiles() {
+ Set<String> customDMNProfiles = IntStream.range(0, 3)
+ .mapToObj(index -> String.format("%s.Profile_%d",
CUSTOM_PROFILES_PACKAGE, index))
+ .collect(Collectors.toSet());
+ Set<DMNProfile> retrieved =
DecisionCodegen.getCustomDMNProfiles(customDMNProfiles,
Thread.currentThread().getContextClassLoader());
+ assertThat(retrieved).isNotNull().hasSize(3);
+ Set<String> retrievedStrings = retrieved.stream().map(profile ->
profile.getClass().getCanonicalName()).collect(Collectors.toSet());
+
assertThat(retrievedStrings).containsExactlyInAnyOrderElementsOf(customDMNProfiles);
+ }
+
private KogitoBuildContext.Builder
stronglyTypedContext(KogitoBuildContext.Builder builder) {
Properties properties = new Properties();
properties.put(DecisionCodegen.STRONGLY_TYPED_CONFIGURATION_KEY,
Boolean.TRUE.toString());
@@ -299,6 +334,14 @@ public class DecisionCodegenTest {
return getDecisionCodegen(sourcePath, AddonsConfig.DEFAULT,
contextBuilder);
}
+ protected DecisionCodegen getDecisionCodegen(String sourcePath,
KogitoBuildContext.Builder contextBuilder, Properties properties) {
+ KogitoBuildContext context = contextBuilder
+ .withApplicationProperties(properties)
+ .build();
+ return DecisionCodegen.ofCollectedResources(context,
+
CollectedResourceProducer.fromPaths(Paths.get(sourcePath).toAbsolutePath()));
+ }
+
protected DecisionCodegen getDecisionCodegen(String sourcePath,
AddonsConfig addonsConfig, KogitoBuildContext.Builder contextBuilder) {
KogitoBuildContext context = stronglyTypedContext(contextBuilder)
.withAddonsConfig(addonsConfig)
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionContainerGeneratorTest.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionContainerGeneratorTest.java
new file mode 100644
index 0000000000..2bdfd268e3
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionContainerGeneratorTest.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.kie.kogito.codegen.decision;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.core.compiler.DMNProfile;
+import org.kie.kogito.dmn.DmnExecutionIdSupplier;
+
+import com.github.javaparser.ast.NodeList;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.expr.NullLiteralExpr;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.kie.kogito.codegen.core.CodegenUtils.newObject;
+import static
org.kie.kogito.codegen.decision.DecisionCodegen.getCustomDMNProfiles;
+import static
org.kie.kogito.codegen.decision.DecisionCodegenTest.CUSTOM_PROFILES_PACKAGE;
+import static
org.kie.kogito.codegen.decision.DecisionContainerGenerator.MONITORED_DECISIONMODEL_TRANSFORMER;
+
+class DecisionContainerGeneratorTest {
+
+ private MethodCallExpr initMethod;
+
+ @BeforeEach
+ void setUp() {
+ initMethod = new MethodCallExpr();
+ initMethod.setName("init");
+ }
+
+ @Test
+ void setupExecIdSupplierVariableWithTracing() {
+ assertThat(initMethod.getArguments()).isEmpty();
+ DecisionContainerGenerator.setupExecIdSupplierVariable(initMethod,
true);
+ assertThat(initMethod.getArguments()).hasSize(1);
+ Expression expected = newObject(DmnExecutionIdSupplier.class);
+ assertThat(initMethod.getArguments().get(0)).isEqualTo(expected);
+ }
+
+ @Test
+ void setupExecIdSupplierVariableWithoutTracing() {
+ assertThat(initMethod.getArguments()).isEmpty();
+ DecisionContainerGenerator.setupExecIdSupplierVariable(initMethod,
false);
+ assertThat(initMethod.getArguments()).hasSize(1);
+ Expression expected = new NullLiteralExpr();
+ assertThat(initMethod.getArguments().get(0)).isEqualTo(expected);
+ }
+
+ @Test
+ void setupDecisionModelTransformerVariableWithMonitoring() {
+ assertThat(initMethod.getArguments()).isEmpty();
+
DecisionContainerGenerator.setupDecisionModelTransformerVariable(initMethod,
true);
+ assertThat(initMethod.getArguments()).hasSize(1);
+ Expression expected = newObject(MONITORED_DECISIONMODEL_TRANSFORMER);
+ assertThat(initMethod.getArguments().get(0)).isEqualTo(expected);
+ }
+
+ @Test
+ void setupDecisionModelTransformerVariableWithoutMonitoring() {
+ assertThat(initMethod.getArguments()).isEmpty();
+
DecisionContainerGenerator.setupDecisionModelTransformerVariable(initMethod,
false);
+ assertThat(initMethod.getArguments()).hasSize(1);
+ Expression expected = new NullLiteralExpr();
+ assertThat(initMethod.getArguments().get(0)).isEqualTo(expected);
+ }
+
+ @Test
+ void setupCustomDMNProfiles() {
+ NodeList<Expression> arguments = initMethod.getArguments();
+ assertThat(initMethod.getArguments()).isEmpty();
+ Set<String> customDMNProfileStrings = IntStream.range(0, 3)
+ .mapToObj(index -> String.format("%s.Profile_%d",
CUSTOM_PROFILES_PACKAGE, index))
+ .collect(Collectors.toSet());
+ Set<DMNProfile> customDMNProfiles =
getCustomDMNProfiles(customDMNProfileStrings,
Thread.currentThread().getContextClassLoader());
+ DecisionContainerGenerator.setupCustomDMNProfiles(initMethod,
customDMNProfiles);
+ assertThat(initMethod.getArguments()).hasSize(1);
+ Expression retrieved = arguments.get(0);
+ assertThat(retrieved).isInstanceOf(MethodCallExpr.class);
+ MethodCallExpr methodCallExpr = (MethodCallExpr) retrieved;
+ assertThat(methodCallExpr.getScope()).isNotEmpty();
+ assertThat(methodCallExpr.getScope().get()).isEqualTo(new
NameExpr(Set.class.getCanonicalName()));
+ assertThat(methodCallExpr.getName().getIdentifier()).isEqualTo("of");
+ NodeList<Expression> retrievedArguments =
methodCallExpr.getArguments();
+ assertThat(retrievedArguments).hasSize(customDMNProfileStrings.size());
+ customDMNProfileStrings.forEach(profileString -> {
+ Expression expectedArgument = newObject(profileString);
+ assertThat(retrievedArguments).contains(expectedArgument);
+ });
+ }
+}
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_0.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_0.java
new file mode 100644
index 0000000000..f67e68809a
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_0.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.kie.kogito.codegen.decision.test.customprofiles;
+
+import java.util.List;
+
+import org.kie.dmn.api.marshalling.DMNExtensionRegister;
+import org.kie.dmn.core.compiler.DMNProfile;
+import org.kie.dmn.core.compiler.DRGElementCompiler;
+import org.kie.dmn.feel.runtime.FEELFunction;
+
+public class Profile_0 implements DMNProfile {
+
+ @Override
+ public List<DMNExtensionRegister> getExtensionRegisters() {
+ return List.of();
+ }
+
+ @Override
+ public List<DRGElementCompiler> getDRGElementCompilers() {
+ return List.of();
+ }
+
+ @Override
+ public List<FEELFunction> getFEELFunctions() {
+ return List.of();
+ }
+}
\ No newline at end of file
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_1.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_1.java
new file mode 100644
index 0000000000..6b600ac529
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_1.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.kie.kogito.codegen.decision.test.customprofiles;
+
+import java.util.List;
+
+import org.kie.dmn.api.marshalling.DMNExtensionRegister;
+import org.kie.dmn.core.compiler.DMNProfile;
+import org.kie.dmn.core.compiler.DRGElementCompiler;
+import org.kie.dmn.feel.runtime.FEELFunction;
+
+public class Profile_1 implements DMNProfile {
+
+ @Override
+ public List<DMNExtensionRegister> getExtensionRegisters() {
+ return List.of();
+ }
+
+ @Override
+ public List<DRGElementCompiler> getDRGElementCompilers() {
+ return List.of();
+ }
+
+ @Override
+ public List<FEELFunction> getFEELFunctions() {
+ return List.of();
+ }
+}
\ No newline at end of file
diff --git
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_2.java
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_2.java
new file mode 100644
index 0000000000..faff39a9cb
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/test/customprofiles/Profile_2.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.kie.kogito.codegen.decision.test.customprofiles;
+
+import java.util.List;
+
+import org.kie.dmn.api.marshalling.DMNExtensionRegister;
+import org.kie.dmn.core.compiler.DMNProfile;
+import org.kie.dmn.core.compiler.DRGElementCompiler;
+import org.kie.dmn.feel.runtime.FEELFunction;
+
+public class Profile_2 implements DMNProfile {
+
+ @Override
+ public List<DMNExtensionRegister> getExtensionRegisters() {
+ return List.of();
+ }
+
+ @Override
+ public List<DRGElementCompiler> getDRGElementCompilers() {
+ return List.of();
+ }
+
+ @Override
+ public List<FEELFunction> getFEELFunctions() {
+ return List.of();
+ }
+}
\ No newline at end of file
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-dmn-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/DMNTypeHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-dmn-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/DMNTypeHandler.java
index 0b98f50dc2..c5a0e69a0d 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-dmn-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/DMNTypeHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-dmn-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/DMNTypeHandler.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UncheckedIOException;
+import java.util.Collections;
import java.util.Map;
import java.util.Objects;
@@ -95,7 +96,7 @@ public class DMNTypeHandler implements FunctionTypeHandler {
private DecisionModel loadDMNFromFile(String namespace, String model,
String file) {
try (Reader reader = new
InputStreamReader(URIContentLoaderFactory.builder(file).withClassloader(this.getClass().getClassLoader()).build().getInputStream()))
{
- return new
DmnDecisionModel(DMNKogito.createGenericDMNRuntime(reader), namespace, model);
+ return new
DmnDecisionModel(DMNKogito.createGenericDMNRuntime(Collections.emptySet(),
reader), namespace, model);
} catch (IOException io) {
throw new UncheckedIOException(io);
}
diff --git
a/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/ApplicationMock.java
b/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/ApplicationMock.java
index 1e572f678d..f478f38207 100644
---
a/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/ApplicationMock.java
+++
b/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/ApplicationMock.java
@@ -19,6 +19,7 @@
package org.kie.kogito.explainability;
import java.io.InputStreamReader;
+import java.util.Collections;
import org.kie.dmn.api.core.DMNRuntime;
import org.kie.kogito.Application;
@@ -31,7 +32,7 @@ import org.kie.kogito.uow.UnitOfWorkManager;
public class ApplicationMock implements Application {
- final static DMNRuntime genericDMNRuntime =
DMNKogito.createGenericDMNRuntime(new InputStreamReader(
+ final static DMNRuntime genericDMNRuntime =
DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new InputStreamReader(
ApplicationMock.class.getResourceAsStream(Constants.MODEL_RESOURCE)));
final static DecisionModels decisionModels;
diff --git
a/springboot/addons/tracing-decision/src/test/java/org/kie/kogito/tracing/decision/BaseSpringBootDecisionTracingTest.java
b/springboot/addons/tracing-decision/src/test/java/org/kie/kogito/tracing/decision/BaseSpringBootDecisionTracingTest.java
index 2aed881af0..a156ef429f 100644
---
a/springboot/addons/tracing-decision/src/test/java/org/kie/kogito/tracing/decision/BaseSpringBootDecisionTracingTest.java
+++
b/springboot/addons/tracing-decision/src/test/java/org/kie/kogito/tracing/decision/BaseSpringBootDecisionTracingTest.java
@@ -19,6 +19,7 @@
package org.kie.kogito.tracing.decision;
import java.io.IOException;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -88,7 +89,7 @@ public abstract class BaseSpringBootDecisionTracingTest {
}
private DMNRuntime buildDMNRuntime() {
- return DMNKogito.createGenericDMNRuntime(new java.io.InputStreamReader(
+ return DMNKogito.createGenericDMNRuntime(Collections.emptySet(), new
java.io.InputStreamReader(
BaseSpringBootDecisionTracingTest.class.getResourceAsStream(TEST_RESOURCE)));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]