[jboss-jira] [JBoss JIRA] Closed: (JBRULES-1410) Rules with Collect / Accumulate CEs not working correctly when dinamically added to a rulebase

Edson Tirelli (JIRA) jira-events at lists.jboss.org
Wed Jan 9 13:03:44 EST 2008


     [ http://jira.jboss.com/jira/browse/JBRULES-1410?page=all ]

Edson Tirelli closed JBRULES-1410.
----------------------------------

    Resolution: Done

Fixed. 

Thanks for reporting and providing test case.



> Rules with Collect / Accumulate CEs not working correctly when dinamically added to a rulebase
> ----------------------------------------------------------------------------------------------
>
>                 Key: JBRULES-1410
>                 URL: http://jira.jboss.com/jira/browse/JBRULES-1410
>             Project: JBoss Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: Reteoo
>    Affects Versions: 4.0.3
>            Reporter: Edson Tirelli
>         Assigned To: Edson Tirelli
>             Fix For: 4.0.4, 4.1.0
>
>
> Reported by Dirk:
> --------------------------
> I have modified my application to allow adding/removing/updating rules during
> runtime.  However, when I add a new rule to the rulebase, I don't get the
> behavior I expect.
> First, as soon as I call RuleBase.addPackage(), the new rules fire (the RHS code
> runs).  Shouldn't that happen only when I call fireAllRules()?
> Second, newly added collect() rules don't collect already asserted objects. New
> non-collect rules can see the objects just fine.
> Attached is a testcase, and below is the output it produces.  Am I doing
> something wrong, or is this a bug?  I'm running Drools 4.0.3 on JDK 1.5.0.13.
> Start
> RuleBase created
> Adding rules about 'tom':
> package rules;
> import java.util.ArrayList;
> import test.Tester.Record;
> import test.Tester;
> rule "Collect tom"
> when
>  $list : ArrayList(size > 0) from collect( Record(field1 == "tom") )
> then
>  Tester.show($list, "Collect tom");
> end
> rule "Non collect tom"
> when
>  $rec : Record( field1 == "tom" )
> then
>  System.out.println("Find 'tom' " + $rec.dump());
> end
> inserting record 1:"tom",
> inserting record 2:"fred",
> inserting record 3:"harry",
> inserting record 4:"fred",
> inserting record 5:"ed",
> inserting record 6:"tom",
> inserting record 7:"sreeni",
> inserting record 8:"jill",
> inserting record 9:"ralph",
> inserting record 10:"tom",
> fireAllRules()
> Find 'tom' 10:"tom",
> 'Collect tom' collected 3 records => 1:"tom", 6:"tom", 10:"tom",
> Find 'tom' 6:"tom",
> Find 'tom' 1:"tom",
> adding rules about 'fred':
> package morerules;
> import java.util.ArrayList;
> import test.Tester.Record;
> import test.Tester;
> rule "Collect fred"
> when
>  $list : ArrayList(size > 0) from collect( Record(field1 == "fred") )
> then
>  Tester.show($list, "Collect fred");
> end
> rule "Non collect fred"
> when
>  $rec : Record( field1 == "fred" )
> then
>  System.out.println("Find 'fred' " + $rec.dump());
> end
>  ==> Why do the new rules fire when added?
> Find 'fred' 4:"fred",
> Find 'fred' 2:"fred",
> 'Collect fred' collected 0 records =>
>  ==> Why doesn't the collect rule collect? The non-collect rule works.
> fireAllRules()
> Changing record 3 to 'fred'
> fireAllRules()
> Find 'fred' 3:"fred",
> 'Collect fred' collected 1 records => 3:"fred",
>  ==> Why does the collect rule not see the other two 'fred' records?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list