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

Drools有状态会话如何不存储fact响应仅保留global全局变量值

Drools有状态会话仅保留全局变量不存储Facts的实现方案

核心逻辑说明

Drools有状态会话的全局变量(global)存储在独立于工作内存(Working Memory)的上下文空间中,删除工作内存中的所有Fact对象不会对已设置的全局变量产生任何影响,完全匹配你的需求。

具体实现方案

方案1:手动清理工作内存Fact

每次请求处理完成后,遍历并删除当前会话工作内存中所有的Fact对象即可,示例代码如下:

// 规则执行完成后运行清理逻辑
Collection<? extends Object> allFacts = ksession.getObjects();
for (Object fact : allFacts) {
    ksession.delete(ksession.getFactHandle(fact));
}

方案2:通过Kie Server批量命令自动清理

如果通过Kie Server客户端调用服务,直接在批量执行命令中追加删除所有Fact的命令即可,无需手动维护Fact列表,示例代码如下:

// 构造执行命令集合
List<Command> commandList = new ArrayList<>();
// 插入本次请求的校验Fact
commandList.add(CommandFactory.newInsert(yourCheckFact));
// 执行所有规则
commandList.add(CommandFactory.newFireAllRules());
// 删除工作内存中所有Fact,不会影响全局变量
commandList.add(CommandFactory.newDeleteObjects("*"));

BatchExecutionCommand batchCommand = CommandFactory.newBatchExecution(commandList);
// 调用Kie Server执行
ServiceResponse<ExecutionResults> response = kieServerClient.executeContainer(yourContainerId, batchCommand);

注意事项

  • 不要调用ksession.dispose()方法销毁会话,否则会话中存储的大体积全局变量也会被清除,需要重新传输设置。
  • 引导式决策表的规则逻辑不需要做任何调整,清理逻辑对规则业务无侵入。
  • 若全局变量是可变对象,规则运行中对全局变量的修改会自动在会话中持久化,无需额外赋值操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03