Drool学习记录(二) Kie Session、Truth maintenance

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

参考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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值