alissontadeuoliveira opened a new issue, #6711:
URL: https://github.com/apache/incubator-kie-drools/issues/6711
We are facing an intermittent runtime error when executing rules dynamically
built in memory using KieFileSystem and KieContainer.
After a few successful executions, the application starts throwing the
following exception:
reactor.core.scheduler.Schedulers : Scheduler worker in group main
failed with an uncaught exception
_java.lang.NoSuchMethodError: 'void
org.drools.mvel.EvaluatorHelper.initOperators(org.kie.api.runtime.rule.FactHandle,
org.drools.core.reteoo.Tuple,
org.drools.compiler.rule.builder.EvaluatorWrapper[])'
at
ConditionEvaluatorbadf67d390ac4035ad664f412fc5e486.evaluate(Unknown Source)
at org.drools.mvel.MVELConstraint.evaluate(MVELConstraint.java:295)
at org.drools.mvel.MVELConstraint.isAllowed(MVELConstraint.java:245)
at
org.drools.core.phreak.PhreakFromNode.isAllowed(PhreakFromNode.java:231)
at
org.drools.core.phreak.PhreakFromNode.doLeftUpdates(PhreakFromNode.java:177)
at
org.drools.core.phreak.PhreakFromNode.doNode(PhreakFromNode.java:68)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.evaluateNonBetaNonTerminalNode(RuleNetworkEvaluatorImpl.java:405)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.evaluateNonTerminalNode(RuleNetworkEvaluatorImpl.java:385)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.innerEval(RuleNetworkEvaluatorImpl.java:318)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.outerEval(RuleNetworkEvaluatorImpl.java:250)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.evaluateNetwork(RuleNetworkEvaluatorImpl.java:142)
at
org.drools.core.phreak.RuleExecutor.evaluateNetwork(RuleExecutor.java:225)
at
org.drools.kiesession.agenda.DefaultAgenda.evaluateEagerList(DefaultAgenda.java:499)
at
org.drools.core.phreak.RuleExecutor.ruleWithHigherSalienceActivated(RuleExecutor.java:272)
at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:169)
at
org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:91)
at
org.drools.core.concurrent.AbstractGroupEvaluator.evaluateAndFire(AbstractGroupEvaluator.java:53)
at
org.drools.kiesession.agenda.DefaultAgenda.fireLoop(DefaultAgenda.java:616)
at
org.drools.kiesession.agenda.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:569)
at
org.drools.kiesession.agenda.DefaultAgenda.fireAllRules(DefaultAgenda.java:561)
at
org.drools.kiesession.session.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1110)
at
org.drools.kiesession.session.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1101)
at
org.drools.kiesession.session.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1089)
at
br.sistema.executorderegras.adapter.drools.runtime.Sessao.executar(Sessao.java:36)
at
br.sistema.executorderegras.adapter.drools.service.impl.ExecutorDeRegrasService.executarEmLote(ExecutorDeRegrasService.java:101)
at
br.sistema.executorderegras.adapter.drools.service.impl.ExecutorDeRegrasService.lambda$executarRegras$7(ExecutorDeRegrasService.java:90)
at reactor.core.publisher.MonoCallable.call(MonoCallable.java:72)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:407)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmit(FluxFlatMap.java:547)
at
reactor.core.publisher.FluxFlatMap$FlatMapInner.onNext(FluxFlatMap.java:988)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
at
reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
at
reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:152)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.checkTerminated(FluxGroupBy.java:670)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drainRegular(FluxGroupBy.java:559)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drain(FluxGroupBy.java:652)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.onComplete(FluxGroupBy.java:710)
at
reactor.core.publisher.FluxGroupBy$GroupByMain.onComplete(FluxGroupBy.java:232)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.checkTerminated(FluxGroupBy.java:670)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drainRegular(FluxGroupBy.java:559)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drain(FluxGroupBy.java:652)
at
reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.onComplete(FluxGroupBy.java:710)
at
reactor.core.publisher.FluxGroupBy$GroupByMain.onComplete(FluxGroupBy.java:232)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:850)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:469)
at
reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:357)
at
reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:294)
at
reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:373)
at
reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201)
at
reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83)
at reactor.core.publisher.Mono.subscribe(Mono.java:4576)
at
reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:196)
at
reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
at
reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:152)
at
reactor.core.publisher.FluxIterable$IterableSubscription.fastPath(FluxIterable.java:424)
at
reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:291)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171)
at
reactor.core.publisher.Operators$BaseFluxToMonoOperator.request(Operators.java:2066)
at
reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onSubscribe(MonoFlatMapMany.java:141)
at
reactor.core.publisher.Operators$BaseFluxToMonoOperator.onSubscribe(Operators.java:2050)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96)
at
reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201)
at
reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83)
at
reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:68)
at
reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194)
at
io.sentry.spring.jakarta.webflux.SentryScheduleHook.lambda$apply$0(SentryScheduleHook.java:22)
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)_
The error happens during rule evaluation (not during build/initialization).
**Environment**
Java: 21
Spring Boot: 3.5.4
Reactor: (WebFlux / reactive stack)
Drools version: 10.2.0
Execution model: dynamic rule loading (no Maven KJARs)
We build rules dynamically in memory using KieFileSystem:
KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId(
"groupId",
"name",
"1.0.0"
);
KieFileSystem kfs = ks.newKieFileSystem();
for (Rule rule : rules) {
kfs.write(
"src/main/resources/" + rule.getName() + ".drl",
rule.getContent()
);
}
kfs.generateAndWritePomXML(releaseId);
KieBuilder kb = ks.newKieBuilder(kfs).buildAll();
if (kb.getResults().hasMessages(Message.Level.ERROR)) {
throw new RuntimeException(kb.getResults().toString());
}
KieContainer container = ks.newKieContainer(releaseId);
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]