In reality it doesn't return any fact, it returns each of the values currently 
in the list held by the bound fact ($p).
Each time the rule is re-evaluated (due to $p changing) it re-iterates over the 
list again (as it doesn't know if the list has changed or not). Drools 
effectively doesn't know anything about the $a's returned from the list nor 
does it keep track of them. Hence when re-evaluating the rule it can't know if 
it is the same set of values that matches last time or a different set of 
values.

Thomas

> -----Original Message-----
> From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
> boun...@lists.jboss.org] On Behalf Of hyjshanghai
> Sent: 19 January 2011 10:21
> To: rules-users@lists.jboss.org
> Subject: [rules-users] Why Using "from" Always Return A New Fact?
>
>
> I am trying to understand why care should be taken to use "from" and
> "lock-on-active" together, as is described in "Section 4.8.3.8. Conditional
> Element from" of
> http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-
> expert/html/ch04.html
> the Drools Reference Document .
>
> It says "the use of from returns a new fact for all intents and purposes
> each time it is evaluated." Why is it true?
>
> Below is the full related-text copied from the Drools Reference Document for
> your reference:
> === BEGIN ===
> You must take caution, however, when using from, especially in conjunction
> with the lock-on-active rule attribute as it may produce unexpected results.
> Consider the example provided earlier, but now slightly modified as follows:
>
> rule "Assign people in North Carolina (NC) to sales region 1"
> ruleflow-group "test"
> lock-on-active true
> when
>     $p : Person( )
>     $a : Address( state == "NC") from $p.address
> then
>     modify ($p) {} #Assign person to sales region 1 in a modify block
> end
>
> rule "Apply a discount to people in the city of Raleigh"
> ruleflow-group "test"
> lock-on-active true
> when
>     $p : Person( )
>     $a : Address( city == "Raleigh") from $p.address
> then
>     modify ($p) {} #Apply discount to person in a modify block
> end
>
> In the above example, persons in Raleigh, NC should be assigned to sales
> region 1 and receive a discount; i.e., you would expect both rules to
> activate and fire. Instead you will find that only the second rule fires.
>
> If you were to turn on the audit log, you would also see that when the
> second rule fires, it deactivates the first rule. Since the rule attribute
> lock-on-active prevents a rule from creating new activations when a set of
> facts change, the first rule fails to reactivate. Though the set of facts
> have not changed, the use of from returns a new fact for all intents and
> purposes each time it is evaluated.
> === END ===
>
> --
> View this message in context: http://drools-java-rules-
> engine.46999.n3.nabble.com/Why-Using-from-Always-Return-A-New-Fact-
> tp2286393p2286393.html
> Sent from the Drools - User mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users


**************************************************************************************
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**************************************************************************************

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to