You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Drools7.55.0运行时增删规则偶发ConditionalBranchNode异常

Drools运行时动态增删规则偶发ConditionalBranchNode cannot be shared异常问题

在Spring Boot项目中使用Drools 7.55.0.Final版本,通过org.drools.core.impl.KnowledgeBaseImpl#addPackages实现运行时插入/更新规则,使用org.drools.core.impl.KnowledgeBaseImpl#removeRule删除规则。通常运行正常,但偶发如下异常:

java.lang.RuntimeException: ConditionalBranchNode cannot be shared
    at org.drools.core.reteoo.ConditionalBranchNode.doRemove(ConditionalBranchNode.java:265) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.common.BaseNode.remove(BaseNode.java:150) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.reteoo.ReteooBuilder.removeLeftTupleNode(ReteooBuilder.java:247) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.reteoo.ReteooBuilder.removePath(ReteooBuilder.java:225) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.reteoo.ReteooBuilder.removeNodes(ReteooBuilder.java:203) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.reteoo.ReteooBuilder.removeTerminalNode(ReteooBuilder.java:196) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.reteoo.ReteooBuilder.removeRules(ReteooBuilder.java:177) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.internalRemoveRules(KnowledgeBaseImpl.java:1575) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.lambda$removeRules$7(KnowledgeBaseImpl.java:1568) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.enqueueModification(KnowledgeBaseImpl.java:748) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.removeRules(KnowledgeBaseImpl.java:1568) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.mergePackage(KnowledgeBaseImpl.java:1309) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.internalAddPackages(KnowledgeBaseImpl.java:912) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.lambda$addPackages$2(KnowledgeBaseImpl.java:731) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.enqueueModification(KnowledgeBaseImpl.java:748) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]
    at org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:731) ~[drools-core-7.55.0.Final.jar!/:7.55.0.Final]

该异常并非必现,难以定位根因。以下是增/更新规则的代码:

KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
kb.add(ResourceFactory.newByteArrayResource(content.getBytes()), ResourceType.DRL);

KnowledgeBuilderErrors errors = kb.getErrors();
if (!CollectionUtils.isEmpty(errors)) {
    for (KnowledgeBuilderError error : errors) {
        log.error(error.toString());
    }
    throw new RuntimeException("load rules error");
}
InternalKnowledgeBase kBase = (InternalKnowledgeBase) kieBase;
kBase.addPackages(kb.getKnowledgePackages());

删除规则的代码:

kieBase.removeRule("rules", name);

通过接口触发上述增删操作,同时规则会被kieSession.fireAllRules()调用,请教是否有人遇到过该问题,以及如何解决?


内容的提问来源于stack exchange,提问作者Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:40:01