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]
>
>

Reply via email to