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