Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-387

Using exists together with facts of the same type can break auto-retraction of logically asserted objects

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 3.0.4
    • 3.0.3
    • drools-core (expert)
    • None

    Description

      I assert 3 Lesson objects in my memory.
      I got 1 rule, which creates logically asserted HardConstraint objects.
      In some cases (not always), those logically asserted objects aren't retracted when they should be, which leads to HardContaints just adding more and more. They aren't logically retracted as they should be when:

      • exists is combined with fact selections of the same class
      • the modified object trigged the rule by the exists part, not by the the fact selection part

      I 'll attach a maven 2 configured proof of concept to repreduce it:
      mvn install eclipse:eclipse idea:idea
      Run net.sf.tabudrool.app.TabudroolApp
      Click "Load unsolvedSchedule2.xml" (the second button on the left)
      Notice the HardConstraint = 2 at the bottom
      Click "Move lesson"
      Move "[net.sf.tabudrool.domain.Lesson-1] 0: teacher0 + group0" to timeslot 1.
      Notice that HardConstraint = 3 instead 1 at the bottom,
      because - as you can see in the log - the previous HardConstraint objects didn't get retracted.

      Here's the drl:

      rule teacherCanOnlyTeachOneGroupAtATime
      when
      $lesson : Lesson($id : id, $teacher : teacher, $timeslot : timeslot)
      exists Lesson(id > $id, teacher == $teacher, timeslot == $timeslot)
      then
      System.out.println(" teacherCanOnlyTeachOneGroupAtATime: " + $lesson);
      assertLogical(new HardConstraint(1));
      end

      Here's a log:

      teacherCanOnlyTeachOneGroupAtATime: [net.sf.tabudrool.domain.Lesson-1] 0: teacher0 + group0
      teacherCanOnlyTeachOneGroupAtATime: [net.sf.tabudrool.domain.Lesson-0] 0: teacher0 + group0
      [ObjectAsserted: handle=[fid:9:9]; object=net.sf.tabudrool.domain.HardConstraint@1f42731]
      [ObjectAsserted: handle=[fid:10:10]; object=net.sf.tabudrool.domain.HardConstraint@53abbb]
      2006-08-03 19:24:35,796 [AWT-EventQueue-0] INFO net.sf.tabudrool.swingui.WorkflowFrame$MoveAction.actionPerformed(WorkflowFrame.java:201)
      Moving [[net.sf.tabudrool.domain.Lesson-1] 0: teacher0 + group0] to [1]
      [ObjectModified: handle=[fid:7:11]; old_object=[net.sf.tabudrool.domain.Lesson-1] 1: teacher0 + group0; new_object=[net.sf.tabudrool.domain.Lesson-1] 1: teacher0 + group0]
      teacherCanOnlyTeachOneGroupAtATime: [net.sf.tabudrool.domain.Lesson-1] 1: teacher0 + group0
      [ObjectAsserted: handle=[fid:11:12]; object=net.sf.tabudrool.domain.HardConstraint@1c8b884]

      As you can see: net.sf.tabudrool.domain.HardConstraint@1f42731 and net.sf.tabudrool.domain.HardConstraint@53abbb weren't retracted (at least one should be).

      Earlier this week I posted a dud jira issue, as far as I can tell from discussing on irc (with conan), this looks like a genuine issue...

      Attachments

        Activity

          People

            etirelli@redhat.com Edson Tirelli
            gdesmet@redhat.com Geoffrey De Smet (Inactive)
            Archiver:
            rhn-support-ceverson Clark Everson

            Dates

              Created:
              Updated:
              Resolved:
              Archived:

              PagerDuty