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

时间:2015-12-07 08:09:15

标签: drools

目前,我在Drools Workbench中构建Drools规则包(a * .jar文件),并将其部署到KIE服务器容器中。要请求服务,我只需将下面的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并且不知道将使用哪一个。如果使用了有状态的,并且我一遍又一遍地使用不同的事实(这里的消息)发布XML命令,那么据我所知,所有事实都将保存在Drools的工作记忆中。

然后,是否会导致内存泄漏,因为没有回退命令?如果是,正确的方式格式化XML命令是什么?

1 个答案:

答案 0 :(得分:1)

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

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

关于撤消事实,假设此操作在Drools 6.x中重命名为“delete”,则您要查找的命令为org.drools.core.command.runtime.rule.DeleteObjectCommand。奇怪的是,此命令仍被序列化为<retract>

希望它有所帮助,