It depends on what addResult() does and if you need the actual values of
A() and B(). Forward chaining engines are "data driven" and as so, changes
to your data (facts) are what cause the engine to cancel activations.
So, if you don't need the actual values of A and B, use "exists":
exists( A( $c : code) and B(parentCode == $c) )
Although, since addResult() uses them as parameters, I guess it is not
the case. So, does addResult() changes your facts in any way? Lets say
addResult() creates a Association fact between A and B, you could write:
when
$a : A( $c : code )
$b : B( parentCode == $c )
not( Association( <you can constraint something here if you want> ) )
then
Or if A and B have an attribute that is set by addResult()
when
$a : A( $c : code )
$b : B( parentCode == $c )
not( A( resultAdded == true ) and B( resultAdded == true ) )
then
So, in the end, rules in forward chaining are about taking actions
triggered by a given data state. Write rules that react to the expected
state and change the state accordingly.
Oh, obviously you can always use fire limit or halt to "pause" the
execution if that is what you want too.
session.fireAllRules( 1 ); // fires only one rule and returns control to the
application
Or:
when
$a : A( $c : code )
$b : B( parentCode == $c )
then
addResult( $a, $b );
drools.halt();
end
After firing the above rule, stop firing rules and return the control to
the application. Above situations will only pause the engine. All
activations that were not fired will remain in the agenda waiting for the
next call to fireAllRules() to be fired.
[]s
Edson
2009/1/26 Maxim Veksler <maxim.veksler(a)gmail.com>
Hello group,
Assuming I have the rule:
rule "try not to loop"
when
$a : A($code : code)
$b : B(parentCode == $code)
then
addResult($a, $b);
end
and the classes:
public class A {
int code;
}
public class B {
int parentCode;
}
I insert into the WM 4 objects :
A(code = 1), A(code = 2);
B(parentCode=1), B(parentCode = 2);
I would like that after calling fireAllRules() only 1 match will be
returned. I have no preference regarding which one, in the current situation
2 matches are returned.
Anyone could suggest a method to enforce this ?
Thank you,
Maxim.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @
www.jboss.com