参考Drools官方文档(3.1 KIE Session和3.2 Inference and truth maintenance in the Drools engine),学习关于Kie Session和Truth maintenace的内容。这两节内容虽然很基础,但是感觉官方文档说的还是不够明了,尤其是Stateless Session和Stateful Session的区别,和insert()和insertLogical()的区别,官方文档给出的样例没有很好的体现出来,下面我尝试用我自己的例子来理解一下
1 Stateless Session和Stateful Session的区别
按照官方解释,Stateless Session每次调用会话是独立的,不保存上次调用的数据状态,而Stateful Session正相反。相对来说,Stateful Session更加容易理解,也更为常用,我们先写一个Stateful Session的例子。
先定义一个Person类
package drools.samples.domain;
public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
再定义一个规则文件statefulSampleRule.drl,逻辑很简单,如果一个person小于18岁,打印"xxx is a child",否则打印"xxx is a adult"。
package drools.samples.rules.statefulSampleRule
import drools.samples.domain.Person
rule "Age < 18"
when
$a : Person(age < 18)
then
System.out.println($a.getName()+" is a child");
end
rule "Age > 18"
when
$a : Person(age >= 18)
then
System.out.println($a.getName()+" is a adult");
end
在kmodule.xml里定义一个名为"statefulTest"的ksession
<?xml version="1.0" encoding="UTF-8"?&g

本文详细探讨了Drools中的Stateless Session与Stateful Session的区别,以及insert()和insertLogical()的使用场景。通过实例解析,展示了Stateless Session不保存数据状态,不允许更新事实,而Stateful Session可以。此外,还分析了insert()用于事实推断,而insertLogical()支持自动撤销不满足条件的事实。
最低0.47元/天 解锁文章
673

被折叠的 条评论
为什么被折叠?



