Hi all,
I am evaluating Drools and am stuck with a simple rule that selects
elements which do not correspond to the condition... Since I am updating
objects in the RHD, I guess it has to do with my wrong understanding
(and the cache...?)
I am trying to allocate lessons to periods (hour). My object model can
be summarize is as follows :
Lesson
boolean : allocated // true if the lesson has been allocated to
an hour
int : session // a session is a bunch of lessons
Subject : subject // an allocated lesson is assigned a subject
Subject
Set<Day> : allocatedDays // days in which this subject is taught -
checked before allocation, as a subject can only be taught once a day
Hour
boolean : allocated // true is this hour has been allocated with a
lesson
Day : day // the day this hour belongs to - required to check with
subject.allocatedDays
I put in the workingMemory a bunch of Lesson objects, which have been
set with Subject and Session id. I also put a bunch of Hour object, set
with a Day.
My rule is as follows:
rule "allocate"
when
$lesson : Lesson(allocated == false, session.type == Session.DISTINCT,
$allocatedDays : subject.allocatedDays)
$availableHour : Hour(allocated == false, day not memberOf
$allocatedDays)
then
$lesson.setHour($availableHour ) ;
$lesson.setAllocated(true) ;
update($lesson);
$availableHour.setSubject($lesson.getSubject()) ;
$availableHour.setAllocated(true );
update($availableHour);
end
When I set a debug on the first line of the THEN section, I can see that
sometimes $availableHour.allocated == true ... sometimes
$lesson.allocated == true (although it's an implicit And statement ...)
Therefore, I can see that the update() works, but it seems that the rule
does not use the updated object (due to shallow copy ??)
Any help more than welcome
Regis