Reputation: 1
I'm working on creating multiple KieSessions dynamically using Drools in Scala. I have two sets of rules stored in different folders (slidingwindow and normal) within the resources/rules directory. The rules are fetched from a database and written to the KieFileSystem. However, when I run the code in the Spark shell, I encounter the following error:
java.lang.RuntimeException: The requested KieBase "normalRulesKBase" does not exist
at org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBaseModelImpl(KieContainerImpl.java:487)
at org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:433)
at createKieSessionWithRules
Here is the relevant Scala code:
def createKieSessionWithRules(drl: String): KieSession = {
val kieServices = KieServices.Factory.get()
val rules = "import com.sample.model.RuleTemplate\n" + drl
val packageDeclaration = "package rules.normal;"
val finalDrl = if (!rules.contains("package ")) {
s"$packageDeclaration\n$rules"
} else {
rules
}
val kieFileSystem = kieServices.newKieFileSystem()
kieFileSystem.write("src/main/resources/rules/normal/normal_rules.drl", finalDrl)
val kieBuilder: KieBuilder = kieServices.newKieBuilder(kieFileSystem)
kieBuilder.buildAll()
val results = kieBuilder.getResults()
if (results.hasMessages(Message.Level.ERROR)) {
throw new RuntimeException("Build Errors:\n" + results.toString())
}
val kieContainer: KieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId())
val kieBase = kieContainer.getKieBase("normalRulesKBase") // Error here
val ksession: KieSession = kieBase.newKieSession()
if (ksession == null) {
throw new RuntimeException("Failed to create normalRulesKSession")
} else {
println("normalRulesKSession created successfully")
}
ksession
}
Upvotes: 0
Views: 55