在QQ(593177274)交流群中,有朋友问到这样一个问题,如果我执行了很多规则,调用fireAllRules方法只会返回触发了几条规则,那么我怎么知道哪些规则被触发了,并把这些触发的规则的名称存如数据库呢?
其实这个问题很好解决,也是实践中必然会遇到的问题,为大家写了一个简单的示例。
在前面的RHS语法章节中我们已经讲过预定义变量drools的简单实用,其实通过它就可以轻松的拿到规则相关的信息。下面看实例: 规则内容如下:
package com.rules
rule "Get name and package demo"
agenda-group "Name and package"
when
then
System.out.println("The rule's name is '" + drools.getRule().getName() + "'");
System.out.println("The rule's package is '" + drools.getRule().getPackageName() + "'");
end
执行规则代码如下:
@Test
public void test(){
KieSession kieSession = this.getKieSession("Name and package");
int count = kieSession.fireAllRules();
kieSession.dispose();
System.out.println("Fire " + count + " rule(s)!");
}
执行结果:
The rule's name is 'Get name and package demo'
The rule's package is 'com.rules'
Fire 1 rule(s)!
源代码已上传至gitHub:https://github.com/secbr/drools
此系列课程持续更新中,QQ群:593177274,欢迎大家加入讨论。