Drools'documentation表示计时器属性现在优先于持续时间:
规则现在支持基于区间和基于cron的计时器,它们取代了现在已弃用的持续时间属性。
但我发现这样的规则不起作用:
rule "Expired auth"
timer(int: 5s)
when
$auth : Authorized()
$noauth : NotAuthorized()
then
retract($auth);
retract($noauth);
end
因为第一次评估时会删除所有事实,并且不会按预期安排规则。 但我发现 duration 属性的规则可以正常工作:
rule "Expired auth"
duration(5s)
...
end
有没有办法通过 timer 来做到这一点?
答案 0 :(得分:2)
持续时间映射到间隔计时器,因此它们的工作方式相同。您的问题可能就在其他地方。
答案 1 :(得分:0)
file.drl
rule "address should be in"
timer(int: 5s 2s) //fire after 5s and will be continue every 2s untill the sleep time out.
when
$address: Address(postcode != null)
then
System.out.println(hello("rule is fired...."));
end
java代码
// Active Mode
KieSessionConfiguration config = KieServices.Factory.get().newKieSessionConfiguration();
config.setOption( ClockTypeOption.get("realtime") );
final KieSession session = kbase.newKieSession( config, null );
session.setGlobal( "myGlobalList", list);
new Thread(new Runnable() {
public void run() {
session.fireUntilHalt();
}
}).start();
session.insert(address);
Thread.sleep(30000L);
System.out.println("end:"+ list);
session.halt();
session.dispose();