Drools规则执行顺序

以堆栈方式执行,优先级低的先入栈,同一优先级的,在规则文件中位置靠前的先入栈.
测试1
rule "test first"
    salience 0
    no-loop false
    when
        $test: String( )
    then 
        System.out.println($test);
        insert("test second");
end

rule "test second"
    salience -10
    when
        $test: String( )
    then 
        System.out.println($test + " the 2nd");
    insert("test three");
end

测试1结果
test
test second
test second the 2nd
test three
test three the 2nd
test the 2nd

测试2
rule "test first"
    salience 0
    no-loop false
    when
        $test: String( )
    then 
        System.out.println($test);
        insert("test second");
end

rule "test second"
    salience 0
    no-loop false
    when
        $test: String( )
    then 
        System.out.println($test + " the 2nd");
        insert("test three");
end

测试2结果
test the 2nd
test three the 2nd
test three
test second the 2nd
test second
test

同一互斥组下,优先级高的如果no-loop true,则,此规则内如果插入新对象,视本规则为不匹配,执行下一规则.
测试3
rule "test second"
	salience 0
	activation-group "show"
	no-loop true
	when
		$test: String( )
	then 
		System.out.println($test);
		insert("test second");
end

rule "test first"
	salience 0
	activation-group "show"
	no-loop true
	when
		$test: String( )
	then 
		System.out.println($test + " the 2nd");
		insert("test three");
end

测试3结果
test the 2nd
test three
test second the 2nd

你可能感兴趣的:(java)