我想一个规则,以便当它是上午8时或太阳升起来了。 如何去这个问题?
rule X
when
( "it's 8am" and ... and ...)
or
(Sun( up ) and ... and ...)
then
// do something
end
定时器的作用就像一个先决条件。 所以我想这不是在这种情况下非常有用。
一个额外的时间事实上将不得不第二更新一次,这将导致规则重烧每一秒。 我想我可以的时候其实分成小时 , 分钟和秒的事实,但不会真正解决问题,而只是让它发生较少。
这样的规则可能/可行的Drools的?
你可以有一个规则,那就是不断跟踪的时间。 那么你的规则可以只检查到时候开火。 我用毫秒简单起见,但我认为你可以看到它如何能适应任何你想要的。 为了解决您的烧制的问题每第二个问题,适应时代的类中使用日历对象或类似的规定。 只是一个时间对象初始化你的知识会话。
rule "update time"
when
$time : Time(value != currentTime)
then
modify($time){
setValue($time.getCurrentTime());
};
end
rule "X"
when
Time(value = //whatever time)
then
// do something
end
public class Time
{
long value;
public Time()
{
value = getCurrentTime();
}
//getter and setter for value
public long getCurrentTime()
{
return System.currentTimeMilliSeconds();
}
}
所以这是我做的有时间作为一个额外的触发器:
1)创建仅基于一个cron触发器,其在上午08时插入时间基于事实的一个单独的规则。
2)有cron的触发时间其实实际的规则检查。
rule "08:00 AM"
timer( cron: 0 0 8 * * ? )
when // empty
then
insertLogical( new Time(31) ); // 31 is a rule ID, see below
end
rule "X"
when
Time( ruleID == 31 )
or
Sun( up )
then
// do something
end
insertLogical插入一个事实,到内存中,并删除它时,它不再需要。 这是时间的事实:
public class Time {
private int ruleID;
public Time( int ruleID ) {
this.ruleID = ruleID;
}
public getRuleID() {
return this.ruleID;
}
}