Re: Re[2]: [drools-user] can your use fireAllRules(AgendaFilter) multiple times

2006-03-07 Thread Lionel Port
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]




Re: Re[2]: [drools-user] can your use fireAllRules(AgendaFilter) multiple times

2006-03-07 Thread Lionel Port
Felipe,

Note that in this situation it seems a waste as your evaluating conditions
for rules you have no intention of firing. Its better to do away with the
agenda filters and have seperate rulebases and seperate working memories and
just assert the same facts into both working memories.

Lionel

On 3/8/06, Lionel Port [EMAIL PROTECTED] wrote:

 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]
 
 



Re: Re[2]: [drools-user] can your use fireAllRules(AgendaFilter) multiple times

2006-03-07 Thread Michael Neale
hmmm... well perhaps the rule needs to be broken down, so that in one
consequence if modifies fact1, and in a different consequnce it modifies
fact2.

I am not sure how it can work otherwise. I assume there is more in your
consequence then just the modifies?

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]




[drools-user] can your use fireAllRules(AgendaFilter) multiple times

2006-03-06 Thread Lionel Port
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.


Re: [drools-user] can your use fireAllRules(AgendaFilter) multiple times

2006-03-06 Thread Michael Neale
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.