This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new a8578b8c0b [KIE-1106] allow to configure KieBase and KieSession also 
via applica… (#5860)
a8578b8c0b is described below

commit a8578b8c0ba3ce3015b91d4121227e58f88606f2
Author: Mario Fusco <[email protected]>
AuthorDate: Tue Apr 23 15:18:01 2024 +0200

    [KIE-1106] allow to configure KieBase and KieSession also via applica… 
(#5860)
    
    * [KIE-1106] allow to configure KieBase and KieSession also via 
application.properties in quarkus extension
    
    * wip
    
    * wip
    
    * split quarkus extension test module to check configuration from both 
kmodule.xml and application.properties
    
    * add warning when a kmodule.xml is ignored
---
 .../compiler/kproject/models/KieBaseModelImpl.java |  16 +-
 .../kproject/models/KieModuleModelImpl.java        |  14 --
 .../codegen/common/DroolsModelBuildContext.java    |  10 +-
 .../context/AbstractDroolsModelBuildContext.java   |  22 +--
 .../codegen/project/KieModuleModelWrapper.java     |  25 ++-
 .../codegen/project/KieSessionModelBuilder.java    |  18 +-
 .../drools/model/codegen/project/RuleCodegen.java  |  40 +++-
 .../quarkus/deployment/DroolsAssetsProcessor.java  |  97 +++++++++-
 .../pom.xml                                        | 204 +++++++++++++++++++++
 .../drools/quarkus/test/kmodule}/ProbeCounter.java |   2 +-
 .../drools/quarkus/test/kmodule}/ProbeEvent.java   |   2 +-
 .../drools/quarkus/test/kmodule}/StockTick.java    |   2 +-
 .../quarkus/test/kmodule}/TestableResource.java    |   4 +-
 .../src/main/resources/META-INF/kmodule.xml        |  16 --
 .../src/main/resources/application.properties      |   3 +-
 .../src/main/resources/org/drools/cep/cep.drl      |   2 +-
 .../src/main/resources/org/drools/probe/probe.drl  |   4 +-
 .../src/main/resources/org/drools/tms/tms.drl      |   0
 .../java/org/drools/quarkus/test/TestableIT.java   |   0
 .../src/main/resources/application.properties      |  15 +-
 drools-quarkus-extension/pom.xml                   |   3 +-
 21 files changed, 404 insertions(+), 95 deletions(-)

diff --git 
a/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieBaseModelImpl.java
 
b/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieBaseModelImpl.java
index ff42cd4d16..5f0844c4c2 100644
--- 
a/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieBaseModelImpl.java
+++ 
b/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieBaseModelImpl.java
@@ -85,8 +85,11 @@ public class KieBaseModelImpl
     public KieBaseModelImpl() {
     }
 
-    public KieBaseModelImpl(KieModuleModel kModule,
-                            String name) {
+    public KieBaseModelImpl(String name) {
+        this(null, name);
+    }
+
+    public KieBaseModelImpl(KieModuleModel kModule, String name) {
         this.kModule = kModule;
         this.includes = new HashSet<>();
         this.name = name;
@@ -175,15 +178,6 @@ public class KieBaseModelImpl
         return this;
     }
 
-    public void moveKSession(String oldQName,
-                             String newQName) {
-        Map<String, KieSessionModel> newMap = new HashMap<>();
-        newMap.putAll( this.kSessions );
-        KieSessionModel kieSessionModel = newMap.remove( oldQName );
-        newMap.put(newQName, kieSessionModel);
-        setKSessions( newMap );
-    }
-
     public List<RuleTemplateModel> getRuleTemplates() {
         return Collections.unmodifiableList( ruleTemplates );
     }
diff --git 
a/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieModuleModelImpl.java
 
b/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieModuleModelImpl.java
index 60e6e4ba87..384c7b0592 100644
--- 
a/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieModuleModelImpl.java
+++ 
b/drools-compiler/src/main/java/org/drools/compiler/kproject/models/KieModuleModelImpl.java
@@ -83,20 +83,6 @@ public class KieModuleModelImpl implements KieModuleModel {
         setKBases( newMap );
     }
 
-    /* (non-Javadoc)
-     * @see 
org.kie.kModule.KieProject#removeKieBaseModel(org.kie.kModule.KieBaseModel)
-     */
-    public void moveKBase(String oldQName, String newQName) {
-        Map<String, KieBaseModel> newMap = new HashMap<>();
-        newMap.putAll( this.kBases );
-        KieBaseModel kieBaseModel = newMap.remove( oldQName );
-        newMap.put( newQName, kieBaseModel);
-        setKBases( newMap );
-    }
-
-    /* (non-Javadoc)
-     * @see org.kie.kModule.KieProject#getKieBaseModels()
-     */
     public Map<String, KieBaseModel> getKieBaseModels() {
         return Collections.unmodifiableMap( kBases );
     }
diff --git 
a/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/DroolsModelBuildContext.java
 
b/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/DroolsModelBuildContext.java
index b3f4ffe37c..a5194eca9c 100644
--- 
a/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/DroolsModelBuildContext.java
+++ 
b/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/DroolsModelBuildContext.java
@@ -18,15 +18,15 @@
  */
 package org.drools.codegen.common;
 
-import org.drools.codegen.common.di.DependencyInjectionAnnotator;
-import org.drools.codegen.common.rest.RestAnnotator;
-
 import java.io.File;
 import java.util.Collection;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.function.Predicate;
 
+import org.drools.codegen.common.di.DependencyInjectionAnnotator;
+import org.drools.codegen.common.rest.RestAnnotator;
+
 public interface DroolsModelBuildContext {
 
     String APPLICATION_PROPERTIES_FILE_NAME = "application.properties";
@@ -83,16 +83,12 @@ public interface DroolsModelBuildContext {
 
         Builder withApplicationProperties(File... files);
 
-//        Builder withAddonsConfig(AddonsConfig addonsConfig);
-
         Builder withClassAvailabilityResolver(Predicate<String> 
classAvailabilityResolver);
 
         Builder withClassLoader(ClassLoader classLoader);
 
         Builder withAppPaths(AppPaths appPaths);
 
-//        Builder withGAV(KogitoGAV gav);
-
         DroolsModelBuildContext build();
     }
 }
diff --git 
a/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/context/AbstractDroolsModelBuildContext.java
 
b/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/context/AbstractDroolsModelBuildContext.java
index eb732b40eb..584430d409 100644
--- 
a/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/context/AbstractDroolsModelBuildContext.java
+++ 
b/drools-model/drools-codegen-common/src/main/java/org/drools/codegen/common/context/AbstractDroolsModelBuildContext.java
@@ -18,20 +18,10 @@
  */
 package org.drools.codegen.common.context;
 
-import org.drools.codegen.common.AppPaths;
-import org.drools.codegen.common.DroolsModelApplicationPropertyProvider;
-import org.drools.codegen.common.DroolsModelBuildContext;
-import org.drools.codegen.common.di.DependencyInjectionAnnotator;
-import org.drools.codegen.common.rest.RestAnnotator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.lang.model.SourceVersion;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.nio.file.Paths;
 import java.text.MessageFormat;
 import java.util.Collection;
 import java.util.HashMap;
@@ -41,6 +31,16 @@ import java.util.Optional;
 import java.util.Properties;
 import java.util.function.Predicate;
 
+import javax.lang.model.SourceVersion;
+
+import org.drools.codegen.common.AppPaths;
+import org.drools.codegen.common.DroolsModelApplicationPropertyProvider;
+import org.drools.codegen.common.DroolsModelBuildContext;
+import org.drools.codegen.common.di.DependencyInjectionAnnotator;
+import org.drools.codegen.common.rest.RestAnnotator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 public abstract class AbstractDroolsModelBuildContext implements 
DroolsModelBuildContext {
 
     public static final String DEFAULT_GROUP_ID = "org.kie.kogito";
@@ -149,9 +149,9 @@ public abstract class AbstractDroolsModelBuildContext 
implements DroolsModelBuil
 
         protected String packageName = DEFAULT_PACKAGE_NAME;
         protected DroolsModelApplicationPropertyProvider applicationProperties 
= DroolsModelApplicationPropertyProvider.of(new Properties());
-//        protected AddonsConfig addonsConfig;
         protected ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
         protected Predicate<String> classAvailabilityResolver = this::hasClass;
+
         // default fallback value (usually overridden)
         protected AppPaths appPaths = AppPaths.fromProjectDir(new 
File(".").toPath());
 
diff --git 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieModuleModelWrapper.java
 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieModuleModelWrapper.java
index 9731c26dc7..307bcef468 100644
--- 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieModuleModelWrapper.java
+++ 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieModuleModelWrapper.java
@@ -18,10 +18,6 @@
  */
 package org.drools.model.codegen.project;
 
-import org.drools.compiler.kproject.models.KieModuleModelImpl;
-import org.kie.api.builder.model.KieBaseModel;
-import org.kie.api.builder.model.KieModuleModel;
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -33,6 +29,10 @@ import java.util.Map;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
+import org.drools.compiler.kproject.models.KieModuleModelImpl;
+import org.kie.api.builder.model.KieBaseModel;
+import org.kie.api.builder.model.KieModuleModel;
+
 import static 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.setDefaultsforEmptyKieModule;
 
 /**
@@ -73,6 +73,23 @@ public class KieModuleModelWrapper {
         return new KieModuleModelImpl();
     }
 
+    static boolean hasKieModule(Path[] resourcePaths) {
+        for (Path resourcePath : resourcePaths) {
+            if (resourcePath.toString().endsWith(".jar")) {
+                InputStream inputStream = fromJarFile(resourcePath);
+                if (inputStream != null) {
+                    return true;
+                }
+            } else {
+                Path moduleXmlPath = 
resourcePath.resolve(KieModuleModelImpl.KMODULE_JAR_PATH.asString());
+                if (Files.exists(moduleXmlPath)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     /*
      * This is really a modified duplicate of 
org.drools.quarkus.deployment.ResourceCollector#fromJarFile(java.nio.file.Path).
      * TODO: Refactor https://issues.redhat.com/browse/DROOLS-7254
diff --git 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieSessionModelBuilder.java
 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieSessionModelBuilder.java
index d0542bbf8a..b8a7fb0eba 100644
--- 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieSessionModelBuilder.java
+++ 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/KieSessionModelBuilder.java
@@ -18,12 +18,6 @@
  */
 package org.drools.model.codegen.project;
 
-import org.drools.codegen.common.DroolsModelBuildContext;
-import org.drools.codegen.common.GeneratedFile;
-import org.drools.codegen.common.GeneratedFileType;
-import org.drools.model.codegen.execmodel.ModelSourceClass;
-import org.kie.api.builder.model.KieBaseModel;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -33,6 +27,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import org.drools.codegen.common.DroolsModelBuildContext;
+import org.drools.codegen.common.GeneratedFile;
+import org.drools.codegen.common.GeneratedFileType;
+import org.drools.model.codegen.execmodel.ModelSourceClass;
+import org.kie.api.builder.model.KieBaseModel;
+
 import static java.util.stream.Collectors.toList;
 
 /**
@@ -45,8 +45,12 @@ public class KieSessionModelBuilder {
     private DroolsModelBuildContext context;
 
     public KieSessionModelBuilder(DroolsModelBuildContext context, 
Collection<CodegenPackageSources> packageSources) {
+        this(context, packageSources, 
KieModuleModelWrapper.fromResourcePaths(context.getAppPaths().getPaths()).kieBaseModels());
+    }
+
+    public KieSessionModelBuilder(DroolsModelBuildContext context, 
Collection<CodegenPackageSources> packageSources, Map<String, KieBaseModel> 
kieBaseModels) {
         this.context = context;
-        this.kieBaseModels = 
KieModuleModelWrapper.fromResourcePaths(context.getAppPaths().getPaths()).kieBaseModels();
+        this.kieBaseModels = kieBaseModels;
         this.modelByKBase = getModelByKBase(packageSources, 
this.kieBaseModels);
     }
 
diff --git 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/RuleCodegen.java
 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/RuleCodegen.java
index 3a0de0a66f..cef015f963 100644
--- 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/RuleCodegen.java
+++ 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/project/RuleCodegen.java
@@ -18,6 +18,11 @@
  */
 package org.drools.model.codegen.project;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+
 import org.drools.codegen.common.DroolsModelBuildContext;
 import org.drools.codegen.common.GeneratedFile;
 import org.drools.drl.extensions.DecisionTableFactory;
@@ -28,9 +33,7 @@ import org.kie.api.io.Resource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Objects;
+import static 
org.drools.model.codegen.project.KieModuleModelWrapper.hasKieModule;
 
 public class RuleCodegen {
 
@@ -47,11 +50,11 @@ public class RuleCodegen {
 
     private final Collection<Resource> resources;
     private Collection<PackageModel> packageModels;
-    private Collection<KieBaseModel> kmoduleKieBaseModels;
 
     private boolean hotReloadMode = false;
     private final boolean decisionTableSupported;
 
+    private Map<String, KieBaseModel> kieBaseModels;
 
     private RuleCodegen(DroolsModelBuildContext context, Collection<Resource> 
resources) {
         Objects.requireNonNull(context, "context cannot be null");
@@ -73,10 +76,16 @@ public class RuleCodegen {
         Collection<GeneratedFile> generatedFiles = 
droolsModelBuilder.generateCanonicalModelSources();
 
         if (!droolsModelBuilder.hasRuleUnits()) {
-            KieSessionModelBuilder kieSessionModelBuilder = new 
KieSessionModelBuilder(context(),
-                    droolsModelBuilder.packageSources());
-            generatedFiles.addAll(kieSessionModelBuilder.generate());
-            this.kmoduleKieBaseModels = 
kieSessionModelBuilder.getKieBaseModels().values();
+            if (kieBaseModels != null) {
+                if (hasKieModule(context.getAppPaths().getPaths())) {
+                    LOGGER.warn("The Kie Module configuration has been 
provided externally, so the existing kmodule.xml file will be ignored.");
+                }
+                generatedFiles.addAll(new KieSessionModelBuilder(context(), 
droolsModelBuilder.packageSources(), kieBaseModels).generate());
+            } else {
+                KieSessionModelBuilder kieSessionModelBuilder = new 
KieSessionModelBuilder(context(), droolsModelBuilder.packageSources());
+                generatedFiles.addAll(kieSessionModelBuilder.generate());
+                this.kieBaseModels = kieSessionModelBuilder.getKieBaseModels();
+            }
         }
 
         if (LOGGER.isDebugEnabled()) {
@@ -110,12 +119,23 @@ public class RuleCodegen {
         hotReloadMode = true;
         return this;
     }
-    
+
+    public RuleCodegen withKieBaseModels(Map<String, KieBaseModel> 
kieBaseModels) {
+        if (!kieBaseModels.isEmpty()) {
+            this.kieBaseModels = kieBaseModels;
+        }
+        return this;
+    }
+
     public Collection<PackageModel> getPackageModels() {
         return packageModels;
     }
     
     public Collection<KieBaseModel> getKmoduleKieBaseModels() {
-        return kmoduleKieBaseModels;
+        return hasKieBaseModels() ? kieBaseModels.values() : 
Collections.emptyList();
+    }
+
+    public boolean hasKieBaseModels() {
+        return kieBaseModels != null && !kieBaseModels.isEmpty();
     }
 }
diff --git 
a/drools-quarkus-extension/drools-quarkus-deployment/src/main/java/org/drools/quarkus/deployment/DroolsAssetsProcessor.java
 
b/drools-quarkus-extension/drools-quarkus-deployment/src/main/java/org/drools/quarkus/deployment/DroolsAssetsProcessor.java
index ded98cfc90..08c68ad06d 100644
--- 
a/drools-quarkus-extension/drools-quarkus-deployment/src/main/java/org/drools/quarkus/deployment/DroolsAssetsProcessor.java
+++ 
b/drools-quarkus-extension/drools-quarkus-deployment/src/main/java/org/drools/quarkus/deployment/DroolsAssetsProcessor.java
@@ -19,6 +19,8 @@
 package org.drools.quarkus.deployment;
 
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -39,12 +41,22 @@ import jakarta.inject.Inject;
 import org.drools.codegen.common.DroolsModelBuildContext;
 import org.drools.codegen.common.GeneratedFile;
 import org.drools.codegen.common.GeneratedFileType;
+import org.drools.compiler.kproject.models.KieBaseModelImpl;
 import org.drools.model.codegen.execmodel.PackageModel;
 import org.drools.model.codegen.project.RuleCodegen;
 import org.drools.quarkus.util.deployment.GlobalsBuildItem;
 import org.drools.quarkus.util.deployment.KmoduleKieBaseModelsBuiltItem;
 import org.drools.quarkus.util.deployment.PatternsTypesBuildItem;
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.kie.api.builder.model.KieBaseModel;
+import org.kie.api.builder.model.KieSessionModel;
+import org.kie.api.conf.EventProcessingOption;
+import org.kie.api.conf.KieBaseMutabilityOption;
+import org.kie.api.conf.PrototypesOption;
+import org.kie.api.conf.SessionsPoolOption;
 import org.kie.api.io.Resource;
+import org.kie.api.runtime.conf.ClockTypeOption;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,6 +85,8 @@ public class DroolsAssetsProcessor {
 
     private static final String FEATURE = "drools";
 
+    private static final String CONFIG_PREFIX = "drools.kbase.";
+
     @BuildStep
     public FeatureBuildItem feature() {
         return new FeatureBuildItem(FEATURE);
@@ -87,12 +101,12 @@ public class DroolsAssetsProcessor {
                                  BuildProducer<KmoduleKieBaseModelsBuiltItem> 
kbaseModelsBI,
                                  BuildProducer<GlobalsBuildItem> globalsBI,
                                  
BuildProducer<GeneratedJaxRsResourceBuildItem> jaxrsProducer) {
-        DroolsModelBuildContext context =
-                createDroolsBuildContext(root.getPaths(), 
combinedIndexBuildItem.getIndex());
+
+        DroolsModelBuildContext context = 
createDroolsBuildContext(root.getPaths(), combinedIndexBuildItem.getIndex());
 
         Collection<Resource> resources = 
ResourceCollector.fromPaths(context.getAppPaths().getPaths());
 
-        RuleCodegen ruleCodegen = ofResources(context, resources);
+        RuleCodegen ruleCodegen = ofResources(context, 
resources).withKieBaseModels(readKieBaseModels());
         Collection<GeneratedFile> generatedFiles = ruleCodegen.generate();
         
generatedFiles.addAll(getRuleUnitDefProducerSource(combinedIndexBuildItem.getIndex()));
 
@@ -115,7 +129,7 @@ public class DroolsAssetsProcessor {
         registerResources(generatedFiles, staticResProducer, resource, 
genResBI);
         
         otnClasesBI.produce(new 
PatternsTypesBuildItem(ruleCodegen.getPackageModels().stream().collect(Collectors.toMap(PackageModel::getName,
 PackageModel::getOtnsClasses))));
-        if (ruleCodegen.getKmoduleKieBaseModels() != null) {
+        if (ruleCodegen.hasKieBaseModels()) {
             kbaseModelsBI.produce(new 
KmoduleKieBaseModelsBuiltItem(ruleCodegen.getKmoduleKieBaseModels()));
         }
         globalsBI.produce(new 
GlobalsBuildItem(ruleCodegen.getPackageModels().stream().collect(Collectors.toMap(PackageModel::getName,
 PackageModel::getGlobals))));
@@ -128,4 +142,79 @@ public class DroolsAssetsProcessor {
                 .filter(b -> restResourceClassNameSet.contains(b.getName()))
                 .forEach(b -> jaxrsProducer.produce(new 
GeneratedJaxRsResourceBuildItem(b.getName(), b.getData())));
     }
+
+    private Map<String, KieBaseModel> readKieBaseModels() {
+        Map<String, KieBaseModel> kieBaseModels = new HashMap<>();
+        Config config = ConfigProvider.getConfig();
+
+        for (String propertyName : config.getPropertyNames()) {
+            if (!propertyName.startsWith(CONFIG_PREFIX)) {
+                continue;
+            }
+
+            String[] splitProp = 
propertyName.substring(CONFIG_PREFIX.length()).split("\\.");
+            if (splitProp.length < 2) {
+                LOGGER.error("Malformed Drools property: " + propertyName);
+                continue;
+            }
+
+            String kBaseName = splitProp[0];
+            KieBaseModel kieBaseModel = 
kieBaseModels.computeIfAbsent(kBaseName, KieBaseModelImpl::new);
+            switch (splitProp[1]) {
+                case "packages":
+                    for (String pkg : config.getValue(propertyName, 
String.class).split("\\,")) {
+                        kieBaseModel.addPackage(pkg);
+                    }
+                    break;
+                case "default":
+                    kieBaseModel.setDefault( config.getValue(propertyName, 
Boolean.class) );
+                    break;
+                case "prototypes":
+                    
kieBaseModel.setPrototypes(PrototypesOption.determinePrototypesOption(config.getValue(propertyName,
 String.class)));
+                    break;
+                case "eventProcessingMode":
+                    
kieBaseModel.setEventProcessingMode(EventProcessingOption.determineEventProcessingMode(config.getValue(propertyName,
 String.class)));
+                    break;
+                case "mutability":
+                    
kieBaseModel.setMutability(KieBaseMutabilityOption.determineMutability(config.getValue(propertyName,
 String.class)));
+                    break;
+                case "sessionsPool":
+                    
kieBaseModel.setSessionsPool(SessionsPoolOption.get(config.getValue(propertyName,
 Integer.class)));
+                    break;
+                case "ksessions":
+                    for (String ksession : config.getValue(propertyName, 
String.class).split("\\,")) {
+                        kieBaseModel.newKieSessionModel(ksession);
+                    }
+                    break;
+                case "ksession":
+                    if (splitProp.length == 2) {
+                        
kieBaseModel.newKieSessionModel(config.getValue(propertyName, String.class));
+                    } else {
+                        if (splitProp.length < 4) {
+                            LOGGER.error("Malformed Drools property: " + 
propertyName);
+                            break;
+                        }
+
+                        String kSessionName = splitProp[2];
+                        KieSessionModel kieSessionModel = 
kieBaseModel.getKieSessionModels().get(kSessionName);
+                        if (kieSessionModel == null) {
+                            kieSessionModel = 
kieBaseModel.newKieSessionModel(kSessionName);
+                        }
+
+                        switch (splitProp[3]) {
+                            case "default":
+                                kieSessionModel.setDefault( 
config.getValue(propertyName, Boolean.class) );
+                                break;
+                            case "clockType":
+                                kieSessionModel.setClockType( 
ClockTypeOption.get(config.getValue(propertyName, String.class) ) );
+                                break;
+                        }
+                    }
+                    break;
+            }
+
+        }
+
+        return kieBaseModels;
+    }
 }
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/pom.xml 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/pom.xml
new file mode 100644
index 0000000000..026e9ccfcc
--- /dev/null
+++ b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/pom.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.drools</groupId>
+    <artifactId>drools-quarkus-extension</artifactId>
+    <version>999-SNAPSHOT</version>
+  </parent>
+
+  <name>Drools :: Quarkus Extension :: Integration Test :: kmodule xml</name>
+  <artifactId>drools-quarkus-integration-test-kmodule</artifactId>
+
+  <properties>
+    
<java.module.name>org.drools.quarkus.integrationtest.kmodule</java.module.name>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-quarkus</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-decisiontables</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-drlonyaml-todrl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-core</artifactId>
+    </dependency>
+
+
+    <dependency> <!-- enable REST endpoint as hook point for E2E opaque 
testing -->
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-resteasy-reactive</artifactId>
+    </dependency>
+    <dependency> <!-- enable assertions in REST endpoint as hook point for E2E 
opaque testing -->
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-junit5</artifactId>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.codehaus.plexus</groupId>
+          <artifactId>plexus-xml</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.maven</groupId>
+          <artifactId>maven-xml-impl</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>io.rest-assured</groupId>
+      <artifactId>rest-assured</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- this is used implicitly by quarkus tests so let's make Maven aware of 
it -->
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-quarkus-deployment</artifactId>
+      <type>pom</type>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>io.quarkus</groupId>
+          <artifactId>quarkus-maven-plugin</artifactId>
+          <version>${version.io.quarkus}</version>
+          <configuration>
+            <noDeps>true</noDeps>
+            <skip>${skipTests}</skip>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+
+    <plugins>
+      <plugin>
+        <groupId>io.quarkus</groupId>
+        <artifactId>quarkus-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>build</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-failsafe-plugin</artifactId>
+        <configuration>
+          <useModulePath>false</useModulePath>
+          <includes>
+            <include>**/*IT.java</include>
+          </includes>
+          <excludes>
+            <exclude>**/*Test.java</exclude>
+            <exclude>**/Native*</exclude>
+          </excludes>
+          <argLine>-Xmx2048m -Xmx4g</argLine>
+          <systemPropertyVariables>
+            
<maven.repo.local>${session.request.localRepositoryPath.path}</maven.repo.local>
+            
<maven.settings>${session.request.userSettingsFile.path}</maven.settings>
+          </systemPropertyVariables>
+        </configuration>
+      </plugin>
+
+      <!-- quarkus-resteasy brings in a couple of dependencies in the javax.* 
namespace that cannot be excluded -->
+      <!-- that's why it is necessary to disable the plugin that checks for 
banned dependencies -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>ban-blacklisted-dependencies</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <fail>false</fail>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>native</id>
+      <activation>
+        <property>
+          <name>native</name>
+        </property>
+      </activation>
+      <properties>
+        <quarkus.package.type>native</quarkus.package.type>
+      </properties>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-failsafe-plugin</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>integration-test</goal>
+                  <goal>verify</goal>
+                </goals>
+                <configuration>
+                  <systemProperties>
+                    
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
+                  </systemProperties>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/ProbeCounter.java
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/ProbeCounter.java
similarity index 96%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/ProbeCounter.java
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/ProbeCounter.java
index d4aef14055..7513973694 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/ProbeCounter.java
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/ProbeCounter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.drools.quarkus.test;
+package org.drools.quarkus.test.kmodule;
 
 public class ProbeCounter {
     private int total = 0;
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/ProbeEvent.java
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/ProbeEvent.java
similarity index 97%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/ProbeEvent.java
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/ProbeEvent.java
index 6fc14eb751..4b52165629 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/ProbeEvent.java
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/ProbeEvent.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.drools.quarkus.test;
+package org.drools.quarkus.test.kmodule;
 
 public class ProbeEvent {
 
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/StockTick.java
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/StockTick.java
similarity index 98%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/StockTick.java
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/StockTick.java
index 837a0e05b8..2ca19b2615 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/StockTick.java
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/StockTick.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.drools.quarkus.test;
+package org.drools.quarkus.test.kmodule;
 
 import java.util.Date;
 
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/TestableResource.java
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/TestableResource.java
similarity index 94%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/TestableResource.java
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/TestableResource.java
index ce87188114..e773238925 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/java/org/drools/quarkus/test/TestableResource.java
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/java/org/drools/quarkus/test/kmodule/TestableResource.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.drools.quarkus.test;
+package org.drools.quarkus.test.kmodule;
 
 import java.util.Collection;
 import java.util.List;
@@ -100,7 +100,7 @@ public class TestableResource {
 
         List<String> pkgNames = 
kBase.getKiePackages().stream().map(KiePackage::getName).collect(Collectors.toList());
         assertThat(pkgNames)
-            
.containsExactlyInAnyOrder("defaultpkg","org.drools.quarkus.test","org.drools.drl","org.drools.dtable","org.drools.cep","org.drools.tms","org.drools.probe","org.drools.yaml","org.drools.prototype");
+            
.containsExactlyInAnyOrder("org.drools.quarkus.test.kmodule","org.drools.cep","org.drools.tms","org.drools.probe");
         
         return Response.ok().build();
     }
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/META-INF/kmodule.xml
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/META-INF/kmodule.xml
similarity index 74%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/META-INF/kmodule.xml
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/META-INF/kmodule.xml
index b5f9c8aec4..97f28d085a 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/META-INF/kmodule.xml
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/META-INF/kmodule.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-
     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
@@ -8,30 +7,15 @@
     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.
-
 -->
 <kmodule xmlns="http://www.drools.org/xsd/kmodule"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-  <kbase name="canDrinkKB" packages="org.drools.drl">
-    <ksession name="canDrinkKS" default="true" />
-  </kbase>
-  <kbase name="canDrinkKBDTable" packages="org.drools.dtable">
-    <ksession name="canDrinkKSDTable" />
-  </kbase>
-  <kbase name="canDrinkKBYaml" packages="org.drools.yaml">
-    <ksession name="canDrinkKSYaml" />
-  </kbase>
-  <kbase name="canDrinkKBPrototype" packages="org.drools.prototype" 
prototypes="allowed">
-    <ksession name="canDrinkKSPrototype" />
-  </kbase>
   <kbase name="cepKB" packages="org.drools.cep" eventProcessingMode="stream">
     <ksession name="cepKS" clockType="pseudo"/>
   </kbase>
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/application.properties
similarity index 96%
copy from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
copy to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/application.properties
index effa45048b..56b0116259 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/application.properties
@@ -17,4 +17,5 @@
 # under the License.
 #
 
-drools.prototypes=allowed
\ No newline at end of file
+quarkus.http.port=8080
+
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/cep/cep.drl
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/cep/cep.drl
similarity index 73%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/cep/cep.drl
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/cep/cep.drl
index b2eac70d97..c25819f679 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/cep/cep.drl
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/cep/cep.drl
@@ -1,6 +1,6 @@
 package org.drools.cep
 
-import org.drools.quarkus.test.StockTick
+import org.drools.quarkus.test.kmodule.StockTick
 
 rule R when
     $a : StockTick( company == "DROO" )
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/probe/probe.drl
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/probe/probe.drl
similarity index 74%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/probe/probe.drl
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/probe/probe.drl
index 9a2806b6de..2278dd63ce 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/probe/probe.drl
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/probe/probe.drl
@@ -1,7 +1,7 @@
 package org.drools.probe
 
-import org.drools.quarkus.test.ProbeEvent;
-import org.drools.quarkus.test.ProbeCounter;
+import org.drools.quarkus.test.kmodule.ProbeEvent;
+import org.drools.quarkus.test.kmodule.ProbeCounter;
 
 declare ProbeCounter
     @role (event)
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/tms/tms.drl
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/tms/tms.drl
similarity index 100%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/org/drools/tms/tms.drl
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/main/resources/org/drools/tms/tms.drl
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/test/java/org/drools/quarkus/test/TestableIT.java
 
b/drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/test/java/org/drools/quarkus/test/TestableIT.java
similarity index 100%
rename from 
drools-quarkus-extension/drools-quarkus-integration-test/src/test/java/org/drools/quarkus/test/TestableIT.java
rename to 
drools-quarkus-extension/drools-quarkus-integration-test-kmodule/src/test/java/org/drools/quarkus/test/TestableIT.java
diff --git 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
 
b/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
index effa45048b..b26fc31a18 100644
--- 
a/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
+++ 
b/drools-quarkus-extension/drools-quarkus-integration-test/src/main/resources/application.properties
@@ -17,4 +17,17 @@
 # under the License.
 #
 
-drools.prototypes=allowed
\ No newline at end of file
+drools.prototypes=allowed
+
+drools.kbase.canDrinkKB.packages=org.drools.drl
+drools.kbase.canDrinkKB.ksession.canDrinkKS.default=true
+
+drools.kbase.canDrinkKBDTable.packages=org.drools.dtable
+drools.kbase.canDrinkKBDTable.ksession=canDrinkKSDTable
+
+drools.kbase.canDrinkKBYaml.packages=org.drools.yaml
+drools.kbase.canDrinkKBYaml.ksession=canDrinkKSYaml
+
+drools.kbase.canDrinkKBPrototype.packages=org.drools.prototype
+drools.kbase.canDrinkKBPrototype.prototypes=allowed
+drools.kbase.canDrinkKBPrototype.ksession=canDrinkKSPrototype
diff --git a/drools-quarkus-extension/pom.xml b/drools-quarkus-extension/pom.xml
index 832ba1ffe7..7956dc7c1d 100644
--- a/drools-quarkus-extension/pom.xml
+++ b/drools-quarkus-extension/pom.xml
@@ -40,6 +40,7 @@
     <module>drools-quarkus</module>
     <module>drools-quarkus-deployment</module>
     <module>drools-quarkus-integration-test</module>
+    <module>drools-quarkus-integration-test-kmodule</module>
     <module>drools-quarkus-integration-test-hotreload</module>
     <module>drools-quarkus-ruleunit-integration-test</module>
     <module>drools-quarkus-quickstart-test</module>
@@ -58,4 +59,4 @@
     </dependencies>
   </dependencyManagement>
 
-</project>
\ No newline at end of file
+</project>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to