I'm using drools-camel 5.4.0.Final. ksession is stateful, I'm in STREAM
mode, and rules are fired with fireUntilHalt().
My test route is:
from( "direct:test-message" ).to(
"drools://node/ksession1?action=insertMessage" );
I'm sending my objects into the engine like so:
template.sendBody( "direct:test-message", new Person( "Bob" ) );
template.sendBody( "direct:test-message", new Person( "Jim" ) );
I have two rules that I'd like to fire in a specific order (1a followed by
1b).
If I define rule1a first in my drl it fires first as I would expect (with or
without a salience specified). But if I define rule1b first, that fires
first even though rule1a has a higher salience.
Here are my two rules / test cases and the results:
*Scenario 1 (rule1a first first as I want it to):*
rule += "rule rule1a salience 100 \n";
rule += " when \n";
rule += " $m : Message( body.class == Person.class, $body : body ) \n";
rule += " $p : Person() from $body \n";
rule += " then \n";
rule += " System.err.println( \"rule1a: Just found person \" +
$p.getName() ); \n";
rule += "end\n";
rule += "rule rule1b\n";
rule += " when \n";
rule += " $m : Message() \n";
rule += " then \n";
rule += " System.err.println( \"rule1b: Just found message \" +
$m.getBody().toString() ); \n";
rule += "end\n";
*Output:*
rule1a: Just found person Bob
rule1b: Just found message
org.apache.camel.component.bean.pojomessage.Person@b49448
rule1a: Just found person Jim
rule1b: Just found message
org.apache.camel.component.bean.pojomessage.Person@f4e9d3
*Scenario 2 (rule1b fires first even through rule1a has a higher salience):*
rule += "rule rule1b\n";
rule += " when \n";
rule += " $m : Message() \n";
rule += " then \n";
rule += " System.err.println( \"rule1b: Just found message \" +
$m.getBody().toString() ); \n";
rule += "end\n";
rule += "rule rule1a salience 100 \n";
rule += " when \n";
rule += " $m : Message( body.class == Person.class, $body : body ) \n";
rule += " $p : Person() from $body \n";
rule += " then \n";
rule += " System.err.println( \"rule1a: Just found person \" +
$p.getName() ); \n";
rule += "end\n";
*Output:*
rule1b: Just found message
org.apache.camel.component.bean.pojomessage.Person@1133fd6
rule1a: Just found person Bob
rule1b: Just found message
org.apache.camel.component.bean.pojomessage.Person@ca425c
rule1a: Just found person Jim
Something simple I'm sure. Any pointers to get my salience working?
Thanks for taking the time to help me out!!
- Ladd
--
View this message in context:
http://drools.46999.n3.nabble.com/Why-does-it-seem-like-salience-is-being...
Sent from the Drools: User forum mailing list archive at
Nabble.com.