Drools使用Rule Template从数据库(drl文件)生成动态规则文件

时间:2017-06-19 14:39:13

标签: java drools

见下文我已尝试过以下页面中的示例。每件事都运行正常,但我没有应用规则,并且生成的状态适用于此规则。

示例代码的位置: http://dilipsarangi.blogspot.co.uk/2015/09/drools-610-dynamic-rules-in-database.html

我能够将表中的数据加载到测试用例中。 但是System.out.println(aa.getName() + "," + aa.getStatus());

aa.getstatus为空。

动态生成的规则。

package org.drools.template.jdbc;
dialect "mvel"

rule "ageRule_7"
    when
        $person : Person(age>=81 && age<100)
    then
     $person.status=":" + "Old Aged";
end

rule "ageRule_6"
    when
        $person : Person(age>=61 && age<81)
    then
     $person.status=":" + "Senior Citizen";
end

rule "ageRule_5"
    when
        $person : Person(age>=41 && age<61)
    then
     $person.status=":" + "Middle Aged";
end

rule "ageRule_4"
    when
        $person : Person(age>=18 && age<41)
    then
     $person.status=":" + "Youth";
end

rule "ageRule_3"
    when
        $person : Person(age>=13 && age<18)
    then
     $person.status=":" + "Juvenile";
end

rule "ageRule_2"
    when
        $person : Person(age>=6 && age<13)
    then
     $person.status=":" + "Young Age";
end

rule "ageRule_1"
    when
        $person : Person(age>=2 && age<6)
    then
     $person.status=":" + "Baby";
end

rule "ageRule_0"
    when
        $person : Person(age>=0 && age<2)
    then
     $person.status=":" + "Infant";
end

1 个答案:

答案 0 :(得分:0)

修改status属性后,您需要更新每个规则中的$ person对象:

update($person);

如果不这样做,对象的任何更改都不会在工作内存中设置。

虽然上述方法有效,但您最好使用modify关键字:

modify($person) {$person.setStatus=":" + "Infant"};

每个规则都类似。在这种情况下,不需要update关键字。

有一些功能,例如属性反应bean,无法使用更新,因此最好将修改作为最佳实践。