Michael was not saying to modify the facts in the consequence. Instead, he was saying that you it would be _possible_ iterate through the facts after the rules had fired and modify them.
You could do something like: memory.fireAllRules(agendaFilter1); // do something // modify all facts so that rules are re-added to agenda. List objects = memory.getObjects(); for (Object fact : objects ) { FactHandle factHandle = memory.getFactHandle(fact); memory.modifyObject(factHandle, fact); } memory.fireAllRules(agendaFilter2); On 3/8/06, Felipe Piccolini <[EMAIL PROTECTED] > wrote: > > Michael, > > But, how can you modify 'all' the objects on the working memory?.. > when a consequence finds a drools.modifyObject(Fact) inside the .drl > all the rulebase is checked again no matter the next line... > > I want to do: > > <java:consequence> > drools.modifyObject (myFact1); > drools.modifyObject(myFact2); > </java:consequence> > > But the matter is the second line is never executed. > > Monday, March 6, 2006, 10:51:29 PM, you wrote: > > > no when its finished, the agenda is clear. > > > I think what you really want is "Agenda Groups" where it is partioned > based > > on some logic - but this is an upcoming drools 3 feature. > > > in the meantime, you can also iterate through and "modify" all the > objects > > that are already in working memory, causing rules to be put on the > agenda > > again (possibly). > > > However, I think the correct way is what you suggested, as you are > talking > > about 2 different points in your applications workflow, hence 2 > rulesets. > > The facts just happen to be the same. In any case, the "cost" is not so > much > > in iterating and calling assertObject, but the work done to calculate > what > > rules should fire, which in any case needs to happen twice. > > > Someone may have another more efficient suggestion however. > > > On 3/7/06, Lionel Port <[EMAIL PROTECTED]> wrote: > >> > >> When you use the fireAllRules(AgendaFilter) method on the WorkingMemory > > >> does > >> it clear the Agenda when its done or can you fire different rules in > the > >> working memory at different points in time without modifying the facts > in > >> between. > >> > >> The rules I have can be broken into two distinct rulesets that need to > be > >> executed at different points but the conditions largely operate on the > >> same > >> facts, so I was trying to save time by asserting all the facts once and > > >> then > >> doing something like: > >> > >> memory.fireAllRules(agendaFilter1); > >> // do something not related to drools > >> memory.fireAllRules(agendaFilter2); > >> > >> > >> It doesn't seem to be working though. Should I just put the rules in > >> different rule bases and assert the facts before I use it. > >> > >> > > > -------------------------- > Felipe Piccolini > [EMAIL PROTECTED] > >