AW: [rules-users] How to avoid circular rule activation for noncircular problems?
Ralph Ammon
ralph.ammon at lisytec.de
Thu Jul 24 12:08:35 EDT 2008
Thank you Marcus,
with your constraint I got rid of the "no-loop true" and the endTime is
recalculated when needed. So my first problem is really solved!
So I tried a similar constraint for the rule "Calc StartTime with
redecessors"
rule "Calc StartTime with predecessors"
when
$t : Task(predecessorCount > 0, $predecessors : predecessors
)
forall (
$succTask : Task( this == $t )
$predTask : Task( this memberOf
$predecessors, endTime > 0 )
)
$endTime : Number()
from accumulate( $p : Task() from $predecessors,
max($p.getEndTime()) )
# new constraint
Task(this == $t, eval($t.getStartTime() !=
$endTime.longValue()))
then
$t.setStartTime( $endTime.longValue() );
System.out.println( "Drools: " + $t.toString() + "
has new StartTime" );
# new update
update( $t );
end
The improvement is that I can do an update in the RHS without infinite
recursion. But the rule is still wrong, because it doesn't fire when the
maximum of predecessors endTimes changes.
Best regards
Ralph
More information about the rules-users
mailing list