[rules-users] Shadow fact problem?

Anstis, Michael (M.) manstis1 at ford.com
Thu Mar 15 08:34:02 EDT 2007


Hi Edson,

Don't worry Edson - you have enough to do to excuse missing a question.

I don't want to put the check into the consequence - oh no, but as given
by my examples the rule "A" never fires when its in the LHS. I wanted to
check my understanding that rule "A" should work the same as rule "B"
with the difference being that the condition is handled by the RETE
network and not some hacky code in the RHS. I am planning on checking
both in trunk tonight - unfortunately family matters mean I can't spend
too much time on the computer in the evenings and I was only able to
play with Maven last night.

Cheers,

Mike
 

-----Original Message-----
From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Edson Tirelli
Sent: 15 March 2007 12:08
To: Rules Users List
Subject: Re: [rules-users] Shadow fact problem?


   Michael,

   Sorry, I missed your previous message... why are you moving the check

into the consequence? As you already realized, that is not  a good 
solution...
   Did you tried your original rule in trunk? Bug is still there?

    []s
    Edson

Anstis, Michael (M.) wrote:

>Sorry to push Edson,
>
>The performance degradation from having the "parental check" in the RHS
>versus the LHS is (expectedly) terrific. We have thousands of
>"attributes" relating to different parent objects and having the rule
>activate for every combination is causing performance problems. Moving
>the RHS into a LHS "eval" would be no better either.
>
>On a different matter, I have successfully installed the source with
>Maven (thanks Mark) and can debug trunk in Eclipse at home!
>
>With kind regards,
>
>Mike
>
>-----Original Message-----
>From: Anstis, Michael (M.) 
>Sent: 14 March 2007 12:28
>To: 'Rules Users List'
>Subject: RE: [rules-users] Shadow fact problem?
>
>OK, Edson, I will try to check it out (I'm having problems accessing
>subversion from work so will try from home).
>
>Whilst trying to implement a workaround though I may have discovered
>another problem (which might have been fixed too):-
>
>rule "A"
>when
>	MaterialEntry ( $m : material )
>	$a2 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE, $mlp : number, parent ==
$m
>)
>	$a3 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE_MODIFIER, $lpm : number,
>parent == $m )
>then
>	System.out.println("Rule A"); //<-- Never fires
>end
>
>rule "B"
>when
>	MaterialEntry ( $m : material )
>	$a2 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE, $mlp : number )
>	$a3 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE_MODIFIER, $lpm : number )
>Then
>	if($a2.getParent() == $m && $a3.getParent() == $m) {
>		System.out.println("Rule B"); //<-- Fires
>	}
>end
>
>If the check for "parent" being equal across $m, $a2 and $a3 is in the
>LHS the rule doesn't activate. However if check is in the RHS the rule
>is OK.
>
>Any thoughts or views (Edson)?
>
>Thanks,
>
>Mike 
>
>-----Original Message-----
>From: rules-users-bounces at lists.jboss.org
>[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Edson Tirelli
>Sent: 13 March 2007 22:57
>To: Rules Users List
>Subject: Re: [rules-users] Shadow fact problem?
>
>
>   Mike,
>
>   Yes, that is a "shadow fact unwanted side-effect" (nice name for a 
>bug hm? :) ), but I remember fixing something similar as part of
another
>
>ticket I was working on. Is it possible for you to verify if the
problem
>
>is happening in trunk?
>   If it is still hapenning, let me know and I will fix it.
>
>   Thank you,
>       Edson
>
>Anstis, Michael (M.) wrote:
>
>  
>
>>Hi,
>>
>>I am running 3.1-M1 and have (by way of example) two simple rules; A 
>>and B as follows:-
>>
>>      *rule* "A"
>>      *when*
>>              $a1 : Attribute ( name == Constants.ATTRIBUTES_A, $pa :
>>      number )
>>              $a2 : Attribute ( name == Constants.ATTRIBUTES_B, $nc :
>>      number )
>>              $p : Process ( attributesList* contains* $a1,
>>      attributesList* contains* $a2 )
>>      *then*
>>             * double* txy = doSomeMaths($pa, $nc, $p);
>>              Attribute a =* new* Attribute(Constants.ATTRIBUTES_C,
>>    
>>
>txy);
>  
>
>>              $p.addAttribute(a);
>>             * assertLogical*(a);
>>             * modify*($p);
>>              System.out.println("Rule 'A' fired");
>>      *end*
>>                             
>>      *rule* "B"
>>      *when*
>>              $a1 : Attribute ( name == Constants.ATTRIBUTES_C, $txy :
>>      number)
>>              $p : Process( attributesList* contains* $a1 )    
>>                              // <-- Line causing rule not to activate
>>
>>      *then*
>>             * double* m = doSomeMoreMaths($txy, $p);
>>              System.out.println("Rule 'B' fired");
>>      *end*
>>
>>Process exposes an ArrayList of Attribute objects (each having a 
>>name\value pair).
>>
>>When the content of the ArrayList held by Process is added to (Rule 
>>'A') the next rule (Rule 'B') is not being activated.
>>
>>Can anybody provide any insight into how best a workaround can be 
>>engineered?
>>
>>With kind regards,
>>
>>Mike
>>
>>----------------------------------------------------------------------
-
>>    
>>
>-
>  
>
>>_______________________________________________
>>rules-users mailing list
>>rules-users at lists.jboss.org
>>https://lists.jboss.org/mailman/listinfo/rules-users
>> 
>>
>>    
>>
>
>
>  
>


-- 
 Edson Tirelli
 Software Engineer - JBoss Rules Core Developer
 Office: +55 11 3124-6000
 Mobile: +55 11 9218-4151
 JBoss, a division of Red Hat @ www.jboss.com


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




More information about the rules-users mailing list