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