Thank you Michael,
I will take a look as soon as possible.
[]s
Edson
Anstis, Michael (M.) wrote:
T'is done Edson,
http://jira.jboss.com/jira/browse/JBRULES-744
Although I couldn't assign it to you.
-----Original Message-----
From: rules-users-bounces(a)lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Edson Tirelli
Sent: 20 March 2007 12:12
To: Rules Users List
Subject: Re: [rules-users] Shadow fact problem?
Mike,
May I ask you please to open a JIRA for that, attaching your sample
code? Also, either assign the ticket for me or let me know the ticket
number after you open it.
I will take a detailed look.
Thank you,
Edson
Anstis, Michael (M.) wrote:
>Hi Edson,
>
>I've tested branch in SVN but have to report that the following does
>
>
not
>work as expected:-
>
>** Java
>
>Machine mt1=new Machine();
>mt1.setDescription("Test Machine");
>Attribute at1=new Attribute("TEST1", 5);
>Attribute at2=new Attribute("TEST2", 25);
>mt1.addAttribute(at1); // <-- A machine contains an ArrayList of
>Attributes
>mt1.addAttribute(at2); // <-- A machine contains an ArrayList of
>Attributes
>wm.assertObject(mt1);
>wm.assertObject(at1);
>wm.assertObject(at2);
>
>** Rules
>
>rule "Test 1a" // <-- Works OK
>when
> $m : Machine ( description == "Test Machine" )
>then
> System.out.println("DEBUG---> Adding new Attribute(\"TEST3\") to
>Machine");
> Attribute a = new Attribute("TEST3", 100);
> $m.addAttribute(a);
> assertLogical(a);
>end
>
>rule "Test 1b" // <-- Does not activate
>when
> $a : Attribute ( name == "TEST3" )
> $m : Machine ( attributesList contains $a )
>then
> System.out.println("DEBUG---> Found machine with new
>Attribute");
>End
>
>The following rule does however work which suggests a problem with
>"contains"(?):-
>
>rule "Test 1c" // <-- Does activate
>when
> $m : Machine ( description == "Test Machine" )
> $a1 : Attribute ( name == "TEST1", parent == $m )
> $a2 : Attribute ( name == "TEST2", parent == $m )
> $a3 : Attribute ( name == "TEST3", parent == $m )
>then
> System.out.println("DEBUG---> " + $m.toString());
> System.out.println("DEBUG---> " + $a1.toString());
> System.out.println("DEBUG---> " + $a2.toString());
>end
>
>Also, the following type of syntax appears problematic:-
>
>rule "Test 2"
>when
> $m : Machine ( description == "Test Machine" )
> $a1 : Attribute ( name == "TEST1", parent == $m )
> $a2 : Attribute ( name == "TEST2", parent == $m )
>then
> System.out.println("DEBUG---> " + $m.toString());
> System.out.println("DEBUG---> " + $a1.toString());
> System.out.println("DEBUG---> " + $a2.toString());
>End
>
>This particular example works OK (all facts asserted outside of rules)
>however this (real life) example does not:-
>
>rule "Material - Lock Pressure Modifier"
>salience 849
>when
> MaterialEntry ( $m : material )
> $a1 : Attribute ( name == Constants.ATTRIBUTES_PROCESS_TOTAL_XY,
>$txy : number )
> $a2 : Attribute ( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE, $mlp : number, parent ==
>
>
$m
>)
>then
> Attribute a = new
>Attribute(Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE_MODIFIER, m);
> assertLogical(a);
> $m.addAttribute(a);
>end
>
>rule "Material - Clamping Force"
>salience 848
>when
> MaterialEntry ( $m : material )
> $a1 : Attribute( name == Constants.ATTRIBUTES_PROCESS_TOTAL_XY,
>$txy : number ) // <--
>
>
Same as
>above
> $a2 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE, $mlp : number, parent ==
>
>
$m
>) // <-- Same as above
>//(a) $a3 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE_MODIFIER, $lpm : number,
>parent == $m ) // <-- Asserted above
>//(b) $a3 : Attribute( name ==
>Constants.ATTRIBUTES_MATERIAL_LOCK_PRESSURE_MODIFIER, $lpm : number )
>then
> System.out.println("DEBUG--->" + $a2.getParent());
> System.out.println("DEBUG--->" + $a3.getParent());
>end
>
>If line "//(a)" is used the rule does not fire; if rule "//(b)" is
used
>instead (i.e. the RHS does not check the "parent" property) the rule
>triggers. However the two debug lines show "$a2.getParent()" and
>"$a3.getParent()" point to the same object - one "parent == $m"
worked
>the other (asserted by a rule) does not appear to work.
>
>Thanks,
>
>Mike
>
>-----Original Message-----
>From: Anstis, Michael (M.)
>Sent: 15 March 2007 12:34
>To: 'Rules Users List'
>Subject: RE: [rules-users] Shadow fact problem?
>
>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(a)lists.jboss.org
>[mailto:rules-users-bounces@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(a)lists.jboss.org
>>[mailto:rules-users-bounces@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(a)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 @