[rules-users] Drools Rule Evaluations are Inconsistent

Wolfgang Laun wolfgang.laun at gmail.com
Sat Sep 22 13:16:01 EDT 2012


All three rules fire correctly with 5.2.0 and 5.3.0, irrespective of the quotes
used to delimit strings. I've seen and reported other problems with 5.4.0.

-W


On 22/09/2012, bdolbeare <bdolbeare at yahoo.com> wrote:
> Drools is not producing consistent results in the following example.  If
> you
> run the DRL shown below, you will see that rules 2 and 3 activate and log a
> message.  If you then comment out rule 3 in the DRL (you must put the
> entire
> rule inside /*  */ characters rather than simply disabling it), and rerun
> it, you'll notice that rules 1 and 2 fire.  How is it that the presence of
> rule 3 affects whether or not rule 1 activates?  These two rules are not
> dependent in their DRL.
>
> It appears to be related to the fact that rule 1 uses single quotes instead
> of double quotes.  If you change that, then Drools starts behaving
> consistently.  This makes me believe that the problem is somehow related to
> how Drools is building the Rete tree with the single quotes.
>
>
>
> With all three rules active I get:
>
> [main]::INFO ::DroolsTest::test 3 hit on RecordA( id=100 ) - RecordB(
> id=100, role=2 )
> [main]::INFO ::DroolsTest::test 2 hit on RecordA( id=100 ) - RecordB(
> id=100, role=1 )
>
>
> With rule 3 commented out I get:
>
> [main]::INFO ::DroolsTest::test 2 hit on RecordA( id=100 ) - RecordB(
> id=100, role=1 )
> [main]::INFO ::DroolsTest::test 1 hit on RecordA( id=100 ) - RecordB(
> id=100, role=1 )
>
>
> Interestingly, if you comment out rule 2 so only rules 1 and 3 are active,
> rule 1 fires again:
>
> [main]::INFO ::DroolsTest::test 3 hit on RecordA( id=100 ) - RecordB(
> id=100, role=2 )
> [main]::INFO ::DroolsTest::test 1 hit on RecordA( id=100 ) - RecordB(
> id=100, role=1 )
>
>
>
> *Environment:  Drools 5.4.0*
>
>
>
>
> package tests
>
> import org.apache.log4j.Logger;
>
> global Logger log
>
>
> declare RecordA
> 	id : long
> end
>
> declare RecordB
> 	id : long
> 	role : String
> end
>
> rule "insert data 1"
> salience 99999
> 	when
> 	then
> 		insert (new RecordA(100));
> 		insert (new RecordB(100, "1"));
> 		insert (new RecordB(100, "2"));
> end
>
> rule "test 1"
> 	when
> 		a : RecordA( )
> 		b : RecordB( id == b.id, role == '1' )
> 	then
> 		log.info(String.format("%s hit on %s - %s", kcontext.getRule().getName(),
> a, b));
> end
>
> rule "test 2"
> 	when
> 		a : RecordA( )
> 		b : RecordB( id == b.id, role == "1" )
> 	then
> 		log.info(String.format("%s hit on %s - %s", kcontext.getRule().getName(),
> a, b));		
> end
>
> rule "test 3"
> 	when
> 		a : RecordA( )
> 		b : RecordB( id == b.id, role == "2" )
> 	then
> 		log.info(String.format("%s hit on %s - %s", kcontext.getRule().getName(),
> a, b));
> end
>
>
>
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Drools-Rule-Evaluations-are-Inconsistent-tp4019900.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>


More information about the rules-users mailing list