Java Drools使用规则模板从数据库(drl文件)生成动态规则文件
见下文,我已经尝试了下面页面中的示例。每件事都很好,但我没有得到应用的规则,并由此规则生成适用的状态 样本代码的位置: 我能够将表中的数据加载到测试用例中。 但是当Java Drools使用规则模板从数据库(drl文件)生成动态规则文件,java,drools,Java,Drools,见下文,我已经尝试了下面页面中的示例。每件事都很好,但我没有得到应用的规则,并由此规则生成适用的状态 样本代码的位置: 我能够将表中的数据加载到测试用例中。 但是当System.out.println(aa.getName()+,“+aa.getStatus()) aa.getstatus为空 动态生成的规则 package org.drools.template.jdbc; dialect "mvel" rule "ageRule_7" when $person :
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
package org.drools.template.jdbc;
方言“mvel”
规则“第7条”
什么时候
$person:person(年龄>=81&&age=61&&age=41&&age=18&&age=13&&age=6&&age=2&&age=0&&age修改status属性后,需要更新每个规则中的$person对象:
update($person);
如果不这样做,对对象的任何更改都不会设置在工作内存中
尽管上述方法有效,但最好改用modify关键字:
modify($person) {$person.setStatus=":" + "Infant"};
对于每个规则都类似。在这种情况下,不需要update关键字
有一些功能,例如无法使用更新的属性被动bean,因此最好使用修改作为最佳实践。我使用的是6.4.0 final。我发布的规则是使用drt文件生成的规则。实际的drt模板“我尝试使用以下更改更改模板,但实际上不起作用。请参见li中的示例nk提供实际的drl文件'then//$person.status=“:“+”@{status}”;modify($person){$person.status=“:“+”@{status}”;}'对不起,将分号移到{}括号之外。我已经更新了答案。@JavaEvangelist使用setX()也是一种很好的做法
方法,而不是访问字段。@Neil Belch,我使用的是Drools 6.1.0修改($person){$person.status=“:“+”baby“};我的项目在git hub@Neil Belch,我使用的是depreact方法,这是问题的原因吗