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