Hi,

because of https://issues.jboss.org/browse/JBRULES-2942 i just migrated our 
(maven) project to 5.2.0.Final - we depend on salience in some of our rules.

However, after the salience issue was gone I'm facing a new problem in several 
test cases:
Rules in previously (drools 5.1.1) working rule files don't get activated 
anymore when I insert facts - none at all.
When moving the rule expected to fire (see "rule 4" in attached file)  to the 
first position in the drl file then suddenly several rules get activated and 
the 
expected rule fires.

This shouldn't be the case, shouldn't it? Or do I miss something obvious here?

Could a corrupt file somehow cause this?

I attachached the rule file which causes the problem (I needed to obfuscate 
some names, sry). It is quite simple.

I experienced a similar issue (again since 5.2.0.Final) with rules generated 
from templates, where I had to change the constraints order in the templates' 
LHS for then generated rules to get activated at all.

First I would like to know if my statement that the rule position in the drl 
file shouldn't influence the activation (I don't mean firing or order of 
activations) of a rule at all, is correct.
I don't use agenda groups.

And second if someone experienced similar issues.

I will try to build a test case which hopefully can reproduce this as soon as 
possible.


Florian
package com.example.objectwrapper

#list any import classes here.
import com.example.objectwrapper.api.product.model.Wrapper;
import com.example.objectwrapper.api.supplier.WrapperModule;
import com.example.objectwrapper.api.stock.StockStatus;

global org.slf4j.Logger logger;
global java.util.HashMap stocks;

rule "EXCEPTION"
        salience 100
        when
                $wrapperModule1 : WrapperModule()
                $wrapperModule2 : WrapperModule(this != $wrapperModule1)
        then
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******\n");
                logger.debug("wrapperModule1" + $wrapperModule1 + " exists\n");
                logger.debug("wrapperModule2 " + $wrapperModule2 + " exists\n");
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
                throw new IllegalStateException("More than one WrapperModule 
exists: wrapperModule1[" + $wrapperModule1 + "]/wrapperModule2[" + 
$wrapperModule2 + "]\n");
end

rule "Rule 4"
        when
                $wrapper : Wrapper
                (
                        this.product.boolean4 == true
                )
                eval( ( ((StockStatus) 
stocks.get($wrapper.getProduct().getId())).getQuantity() == 0) == true)
        then
                retract($wrapper);
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******");
                logger.debug("Retracted from WM: Wrapper " + $wrapper);
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
end

rule "Rule 1"
        when
                $wrapperModule : WrapperModule
                (
                        (this == WrapperModule.ENUM_A) || (this == 
WrapperModule.ENUM_B)
                )
                not $wrapperModule2 : WrapperModule(this != $wrapperModule)

                $wrapper : Wrapper
                (
                        (product.boolean1 == true)
                )
        then
                retract($wrapper);
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******");
                logger.debug("Retracted from WM: Wrapper " + $wrapper);
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
end

rule "Rule 2"
        when
                $wrapperModule : WrapperModule
                (
                        (this == WrapperModule.ENUM_C)
                )
                not $wrapperModule2 : WrapperModule(this != $wrapperModule)

                $wrapper : Wrapper
                (
                )
                eval( (( (StockStatus) 
stocks.get($wrapper.getProduct().getId())).getQuantity() <= 0) == true)
        then
                retract($wrapper);
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******");
                logger.debug("Retracted from WM: Wrapper " + $wrapper);
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
end

rule "Rule 3"
        when
                $wrapper : Wrapper
                (
                        this.product.boolean3 == true
                )
        then
                retract($wrapper);
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******");
                logger.debug("Retracted from WM: Wrapper " + $wrapper);
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
end

rule "Rule 5"
        when
                $wrapper : Wrapper
                (
                        this.product.boolean5 == true
                )
                eval( (((StockStatus) 
stocks.get($wrapper.getProduct().getId())).getQuantity() == 0) == true)
        then
                retract($wrapper);
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******");
                logger.debug("Retracted from WM: Wrapper " + $wrapper);
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
end

rule "Rule 6"
        when
                $wrapper : Wrapper
                (
                        this.product.boolean6 == true
                )
        then
                retract($wrapper);
                logger.debug("****** rule " + drools.getRule().getName() + " 
fired ******\n");
                logger.debug("Retracted from WM: Wrapper " + $wrapper);
                logger.debug("****** end rule " + drools.getRule().getName() + 
" fired ******\n");
end
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to