I'm trying to create a drools project with kogito and quarkus, some rules have an "InsertLogical" in its consecuence, but I can't figure out how to make the proyect work using the TruthMaintenanceSystem, i have tried multiple "solutions" but none of them worked, i always get the error:
org.drools.core.common.MissingDependencyException: You're trying to use the Truth Maintenance System without having imported it. Please add the module org.drools:drools-tms to your classpath.
at org.drools.core.common.TruthMaintenanceSystemFactory.throwExceptionForMissingTms(TruthMaintenanceSystemFactory.java:51)
at org.drools.kiesession.consequence.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:144)
at org.drools.kiesession.consequence.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:139)
at org.kie.kogito.legacy.PF3.LambdaConsequenceF352674214CBCA67851227756FDB4204.execute(LambdaConsequenceF352674214CBCA67851227756FDB4204.java:23)
at org.kie.kogito.legacy.PF3.LambdaConsequenceF352674214CBCA67851227756FDB4204.execute(LambdaConsequenceF352674214CBCA67851227756FDB4204.java:10)
at org.drools.model.functions.Block1$Impl.execute(Block1.java:40)
at org.drools.modelcompiler.consequence.LambdaConsequence.evaluate(LambdaConsequence.java:68)
at org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:423)
at org.drools.core.phreak.RuleExecutor.fireActivation(RuleExecutor.java:370)
at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:158)
at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:110)
at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:33)
at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
at org.drools.kiesession.agenda.DefaultAgenda.fireLoop(DefaultAgenda.java:698)
at org.drools.kiesession.agenda.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:645)
at org.drools.kiesession.agenda.DefaultAgenda.fireAllRules(DefaultAgenda.java:637)
at org.drools.kiesession.session.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1117)
at org.drools.kiesession.session.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1108)
at org.drools.kiesession.session.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1092)
I took this project as reference: rules-legacy-quarkus-example
and added the required drools-tms dependency.
A dummy example of the problematic rule:
package org.kie.kogito.legacy;
import org.kie.kogito.legacy.LoanApplication;
import org.kie.kogito.legacy.Applicant;
global Integer maxAmount;
global java.util.List approvedApplications;
rule SmallDepositApprove when
$l: LoanApplication( applicant.age >= 20, deposit < 1000, amount <= 2000 )
then
insertLogical(new Applicant("test", 24));
end
The pom.xml (it`s the same from the base example with drools-tms and drools-xml-support)
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<version>1.36.1.Final</version>
<artifactId>rules-legacy-quarkus-example</artifactId>
<name>Kogito Example :: Rules Legacy API - Quarkus</name>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<quarkus-plugin.version>2.16.4.Final</quarkus-plugin.version>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
<quarkus.platform.version>2.16.4.Final</quarkus.platform.version>
<kogito.bom.group-id>org.kie.kogito</kogito.bom.group-id>
<kogito.bom.artifact-id>kogito-bom</kogito.bom.artifact-id>
<kogito.bom.version>1.36.1.Final</kogito.bom.version>
<version.org.kie.kogito>1.36.1.Final</version.org.kie.kogito>
<drools.version>8.36.0.Final</drools.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>${kogito.bom.group-id}</groupId>
<artifactId>${kogito.bom.artifact-id}</artifactId>
<version>${kogito.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-quarkus-rules</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-tms</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-xml-support</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-openapi</artifactId>
</dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-drools</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
It seems reproducible on latest, where added org.drools:drools-tms
but seems the DefaultKnowledgeHelper is always invoked instead of going via the service loader at least because of this.
Currently tracked with https://issues.redhat.com/browse/KOGITO-9141
I'd suggest subscribe to that JIRA in order to follow-up on the updates on the current investigations.
Thank you for reporting.