The Rete algorithm isn't meant to be run this way - all data in globals. Use
a fact class X123 with three booleans, and insert facts with varied field
values. Your rules ought to be
when
X123( cond3 == false )
then
and
when
X123( cond1 == true, cond2 == true )
then
-W
On 2 March 2011 19:43, Dmitri Pissarenko <dmitri.pissarenko(a)gmail.com>wrote:
Hello!
I have following rules file:
import java.util.List;
global List outErrorCodes;
global Boolean condition1;
global Boolean condition2;
global Boolean condition3;
rule "01"
when
eval( condition3 == false);
then
outErrorCodes.add("ERROR_CODE1");
System.out.println("01");
end
rule "02"
when
eval((condition1 == true) && (condition2 == true));
then
outErrorCodes.add("ERROR_CODE2");
System.out.println("02");
end
When I evaluate this file repeatedly, it is evaluated correctly only
the first time.
I don't understand why it happens, because I always create a new
knowledge base for every execution (I don't re-use sessions).
Here is the code:
final KnowledgeBase knowledgeBase2 =
createKnowledgeBase(getRuleFileNames());
final StatefulKnowledgeSession session2 =
knowledgeBase2.newStatefulKnowledgeSession();
...
Then, I set condition1, condition2 and condition3 with calls like this:
session2.setGlobal(curName, curValue);
curValue is Boolean.TRUE or Boolean.FALSE.
Then, I insert the value of the output variable:
session2.setGlobal("outErrorCodes",
new LinkedList<String>());
Then, I invoke these methods:
session2.fireAllRules();
...
session2.dispose();
After fireAllRules, outErrorCodes is always empty (apart from the
first run), even in cases, where rule "01" should apply.
What am I doing wrong?
Thanks in advance
Dmitri
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users