AW: [rules-users] How to avoid circular rule activationfornoncircular problems?

Ralph Ammon ralph.ammon at lisytec.de
Fri Jul 25 09:09:43 EDT 2008


Thank you,

my problem is solved, the following rules work for all my test cases:

  rule "Calc EndTime"
    when
      $t : Task( endTime != ( startTime + duration) )
    then
      $t.setEndTime( $t.getStartTime() + $t.getDuration() );
      System.out.println( "Drools: Set " + $t.getName() + ".EndTime to " + $t.getEndTime() ); 
      update( $t );
  end
  
  rule "Calc StartTime without predecessors"
    when
      $t : Task( predecessorCount == 0, startTime > 0 )
    then
      $t.setStartTime( 0 );
      System.out.println( "Drools: " + $t.toString() + " can start immediately" );
      update( $t );
  end 
  
  rule "Calc StartTime with predecessors"
    when
      $t : Task( predecessorCount > 0, $oldStart : startTime, $predecessors : predecessors )
      $predTask : Task( this memberOf $predecessors, endTime > $oldStart )
    then
      $t.setStartTime( $predTask.getEndTime() );
      System.out.println( "Drools: " + $t.toString() + " has new StartTime" );
      update( $t );
  end
  
  rule "Reset StartTime with predecessors"
    when
      $t : Task( predecessorCount > 0, $oldStart : startTime, $predecessors : predecessors )
      forall( $predTask : Task( this memberOf $predecessors )
                  Task( this == $predTask, endTime < $oldStart) )
    then
      $t.setStartTime( 0 );
      System.out.println( "Drools: " + $t.toString() + " reset StartTime" );
      update( $t );
  end

Best regards
Ralph




More information about the rules-users mailing list