Jboss 这个规则集的顺序是什么
我目前正在学习流口水和阅读这本书 在第4章的开头给出了一个示例来说明Jboss 这个规则集的顺序是什么,jboss,drools,Jboss,Drools,我目前正在学习流口水和阅读这本书 在第4章的开头给出了一个示例来说明delete关键字的使用。例如: rule "Init current date" when then insert(new Date()); end rule "Expire coupons" when $now: Date() $cp: Coupon(validUntil before $now) then delete($cp); end rule "Execute co
delete
关键字的使用。例如:
rule "Init current date"
when
then
insert(new Date());
end
rule "Expire coupons"
when
$now: Date()
$cp: Coupon(validUntil before $now)
then
delete($cp);
end
rule "Execute coupon"
when
$o: Order()
$cp: Coupon(order == $o)
then
System.out.println(" We have a coupon for this order!");
end
现在我的问题是:为什么“执行优惠券”规则比“过期优惠券”规则触发得晚。正如我所了解到的,规则的顺序是不确定的,因此我认为“执行优惠券”规则可以在其他两个规则之前启动,你是对的。根据我的经验,我甚至会在“执行优惠券”先触发上下一些赌注,因为后面的规则通常是先触发的 显然,这个例子必须通过以下两种方式加以纠正:
rule "Execute coupon"
when
$now: Date()
$o: Order()
$cp: Coupon(order == $o, validUntil after $now )
then
System.out.println(" We have a coupon for this order!");
end
或者使用显著性(如果可能的话,应该尽量避免)
但是(我没有这本书),我也可以想象一个场景,其中规则集可能会按照给定的方式工作:
session.insert( new Date() );
session.insert( coupon );
session.fireAllRules();
session.insert( order );
session.fireAllRules();