package com.sample
import
com.sample.Test
rule "rule 1 - 1"
salience
90
when
a :
Test(
computed ==
"false",
c
< 15,
d
>= 75)
then
System.out.println("setting e to
0");
a.setE(0);
update(a);
end
rule "rule 1 -
2"
salience 10
when
a :
Test(
computed ==
"false",
c
< 15,
d
>= 75)
then
System.out.println("setting e to
1");
a.setE(1);
end
Note rule "rule 1 - 2" deliberately uses the same patterns as rule "rule 1 - 1".
Ok, I think I understood well. I modified my business code, now I call if
From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Jonathan Guéhenneux
Sent: 11 April 2008 11:33
To: Rules Users List
Subject: RE: [rules-users] Synch Business Object / Working Memory
(wm != null)
wm.update(wm.getFactHandle(this), this);
each time a properties is modified.
But it is worse. Rules that sould be activated only once actually loop, even if I add the no-loop clause.
I understand why they loop, assuming update = (rectact + insert), but I dont get a solution to my problem. I just want to notify an object changement in order to read again the properties, but I dont want to restart the ruleflow.
Sorry, but I find hard to say it in english because even in french, it's not very clear ;)
Subject: RE: [rules-users] Synch Business Object / Working Memory
Date: Fri, 11 Apr 2008 10:39:41 +0100
From: manstis1@ford.com
To: rules-users@lists.jboss.org
In essence, yes. Have a look at "update" in the manual (and a read on Shadow Facts will probably be useful too).
yes, i made a mistake. its a.setE(...) and not c.setE(...).
From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Jonathan Guéhenneux
Sent: 11 April 2008 10:24
To: Rules Users List
Subject: RE: [rules-users] Synch Business Object / Working Memory
I don't call update. If I dont call update, properties of an object are just read one time for all rules?
Subject: RE: [rules-users] Synch Business Object / Working Memory
Date: Fri, 11 Apr 2008 09:47:43 +0100
From: manstis1@ford.com
To: rules-users@lists.jboss.org
I guess the example is a simplification as "c" (in RHS) has not been bound to a fact.Anyway, that aside, do you call "update" to ensure WM knows of changes to facts otherwise properties need to be "time-constant" which in your example they are not.
Hi,
From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Jonathan Guéhenneux
Sent: 11 April 2008 09:34
To: Rules Users List
Subject: [rules-users] Synch Business Object / Working Memory
I have two rules :
rule "rule 1 - 1"
salience 90
ruleflow-group "rfg1"
when
a : A(
eComputed == "false",
c < 15,
d >= 75)
then
c.setE(0);
end
rule "rule 1 - 2"
salience 10
ruleflow-group "rfg1"
when
a : A(
eComputed == "false",
c >= 15,
d >= 75)
then
c.setE(1);
end
and part of the corresponding business code :
public class A {
...
public String getEComputed(){
if(eComputed)
return "true";
else
return "false";
}
...
public void setE(int e){
this.e = e;
eComputed = true;
}
...
}
so, I expected that if the first rule is activated, the second won't be. But according to my tests, the two rule can be fired on the same object A.
While debugging, I noticed the getEComputed method was only called once. I suppose that I should write this :
rule "rule 1 - 1"
salience 90
ruleflow-group "rfg1"
when
a : A(
eComputed == "false",
c < 15,
d >= 75)
then
c.setE(0);
c.setEComputed("true);
end
rule "rule 1 - 2"
salience 10
ruleflow-group "rfg1"
when
a : A(
eComputed == "false",
c >= 15,
d >= 75)
then
c.setE(1);
c.setEComputed("true);
end
But I would prefer another solution. Thanks for help.
Plus de 15 millions de français utilisent Windows Live Messenger ! Téléchargez Messenger, c'est gratuit !
Plus de 15 millions de français utilisent Windows Live Messenger ! Téléchargez Messenger, c'est gratuit !
Tous vos amis discutent sur Messenger, et vous ? Téléchargez Messenger, c'est gratuit !