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]


Reply via email to