[rules-users] Synch Business Object / Working Memory
Jonathan Guéhenneux
jojolemariole at hotmail.com
Fri Apr 11 10:41:00 EDT 2008
First, thank you for yours answers which are very clear. Your solution will probably work. I'm just desapointed that there is no way to synchronized the shadow with the object. That would be great for my work.
Subject: RE: [rules-users] Synch Business Object / Working Memory
Date: Fri, 11 Apr 2008 14:57:52 +0100
From: manstis1 at ford.com
To: rules-users at lists.jboss.org
Do you need ruleflow? Perhaps this is too simple and I
misunderstood.
package com.sample;
public class Test {
private Integer
a;
private Integer b;
private
Integer c;
public Integer getA()
{
return a;
}
public Integer getB()
{
return b;
}
public Integer getC()
{
return c;
}
public void setA(Integer a)
{
this.a =
a;
}
public void setB(Integer b)
{
this.b =
b;
}
public void setC(Integer c)
{
this.c =
c;
}
}
package com.sample
import
com.sample.Test
rule "rule 1"
salience
90
when
a :
Test( a != null, b == null )
then
System.out.println("setting b to
10");
a.setB(10);
update(a);
end
rule "rule 2"
salience 80
when
a : Test( b : b != null, c ==
null )
then
System.out.println("setting c to b x
5");
a.setC(b *
5);
update(a);
end
rule "rule 3"
salience 70
when
a : Test( c != null
)
then
System.out.println("c =
" + a.getC());
end
From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Jonathan
Guéhenneux
Sent: 11 April 2008 13:23
To: Rules Users
List
Subject: RE: [rules-users] Synch Business Object / Working
Memory
Indeed, it works but I will have to use such booleans for a lot of
rules.
Cause my rule flow is schematically :
compute A
compute
B(A)
compute C(B)
...
Perhaps I may create several ruleflows, one
per independant computing?
Subject: RE: [rules-users] Synch Business Object / Working Memory
Date:
Fri, 11 Apr 2008 12:11:32 +0100
From: manstis1 at ford.com
To:
rules-users at lists.jboss.org
I was thinking something more like this:-
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".
package com.sample;
public class Test {
private boolean computed
=false;
private int c=0;
private
int d=80;
private int e;
public String
getComputed(){
if(computed)
return "true";
else
return
"false";
}
public int
getC() {
return
c;
}
public int
getD() {
return
d;
}
public void
setE(int e){
this.e =
e;
computed =
true;
}
}
Rule
"rule 1 - 1" is the only rule to run (and runs once); the second activatino
being cancelled due to the update to "computed". Here's the audit
view:-
<object-stream>
<list>
<org.drools.audit.event.ActivationLogEvent>
<activationId>rule 1 - 1
[1]</activationId>
<rule>rule
1 - 1</rule>
<declarations>a=com.sample.Test at 67126712(1)</declarations>
<type>4</type>
</org.drools.audit.event.ActivationLogEvent>
<org.drools.audit.event.ActivationLogEvent>
<activationId>rule 1 - 2
[1]</activationId>
<rule>rule
1 - 2</rule>
<declarations>a=com.sample.Test at 67126712(1)</declarations>
<type>4</type>
</org.drools.audit.event.ActivationLogEvent>
<org.drools.audit.event.ObjectLogEvent>
<factId>1</factId>
<objectToString>com.sample.Test at 67126712</objectToString>
<type>1</type>
</org.drools.audit.event.ObjectLogEvent>
<org.drools.audit.event.ActivationLogEvent>
<activationId>rule 1 - 1
[1]</activationId>
<rule>rule
1 - 1</rule>
<declarations>a=com.sample.Test at 67126712(1)</declarations>
<type>6</type>
</org.drools.audit.event.ActivationLogEvent>
<org.drools.audit.event.ActivationLogEvent>
<activationId>rule 1 - 2
[1]</activationId>
<rule>rule
1 - 2</rule>
<declarations>a=com.sample.Test at 67126712(1)</declarations>
<type>5</type>
</org.drools.audit.event.ActivationLogEvent>
<org.drools.audit.event.ObjectLogEvent>
<factId>1</factId>
<objectToString>com.sample.Test at 67126712</objectToString>
<type>2</type>
</org.drools.audit.event.ObjectLogEvent>
<org.drools.audit.event.ActivationLogEvent>
<activationId>rule 1 - 1
[1]</activationId>
<rule>rule
1 - 1</rule>
<declarations>a=com.sample.Test at 67126712(1)</declarations>
<type>7</type>
</org.drools.audit.event.ActivationLogEvent>
</list>
</object-stream>
From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at 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
Ok, I think I understood well. I modified my business code, now
I call if
(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 at ford.com
To: rules-users at 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).
From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at 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
yes, i made a mistake. its a.setE(...) and not
c.setE(...).
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 at ford.com
To: rules-users at 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.
From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at 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
Hi,
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 !
Tous vos amis discutent sur Messenger, et vous ? Téléchargez Messenger,
c'est gratuit !
_________________________________________________________________
Avec Hotmail, vos e-mails vous suivent partout ! Mettez Hotmail sur votre mobile !
http://www.messengersurvotremobile.com/?d=hotmail
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080411/afc23fdd/attachment.html
More information about the rules-users
mailing list