如何为 Drools KIE 服务器格式化 xml 字符串?

How to format xml string for Drools KIE server?

目前,我在 Drools Workbench 中构建 Drools 规则包(*.jar 文件),并将其部署到 KIE 服务器容器。要请求该服务,我只需 post 一个 XML 命令到容器,该命令摘自 here:

<batch-execution lookup="defaultKieSession">
<insert out-identifier="message" return-object="true" entry-point="DEFAULT">
    <com.arty.drlwb.MyExampleType>
          <message>Hello Worlddddd</message>
    </com.arty.drlwb.MyExampleType>
</insert>
<fire-all-rules/>
</batch-execution>

我能得到我所期望的。一切正常。

但是我发现有two KieSessions in the rule package,不知道会用到哪一个。如果使用有状态的,并且我一遍又一遍地使用不同的事实(此处的消息)执行 post XML 命令,据我所知,所有事实都将保存在 Drools 的工作记忆中。

那么,没有retract命令会不会导致内存泄露?如果是,格式化的正确方法是什么XML 命令?

可以通过 <batch-execution> 元素中的 lookup 属性指定您要在 kie-server 中用于批处理的会话。在您的情况下,将使用名称为 defaultKieSession 的 KieSession。

如果没有指定lookup属性,那么会选择kmodule.xml中定义为默认(default="true")的KieSession。如果在 kmodule.xml 中指定了多个默认会话(就像在您之前的 post 中一样),那么我不确定会选择哪一个。我想说的是,在 <batch-execution> 元素中提供 lookup 属性以避免混淆始终是一个好习惯。

关于撤回事实,鉴于此操作在Drools6.x中被重命名为"delete",您查找的命令是org.drools.core.command.runtime.rule.DeleteObjectCommand。奇怪的是,这个命令仍然被序列化为 <retract>.

希望对您有所帮助,