目前,我在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命令是什么?
答案 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>
。
希望它有所帮助,