Drools规则引擎如何获取规则名称和列表
今天有朋友加我微信好友(微信号:541075754),咨询如何通过API获取规则名称,准确得说应该是规则列表。
针对这个问题通常有两个场景,第一个场景为执行规则之外的代码中获得规则名称的列表;第二个场景为触发的规则中获取规则名称。
DRL文件中获取规则名称
首先来看第二种形式的获取,也就是在DRL文件中(通常是then中)获取当前被触发的规则的名称。
这种情况采用drools内置的drools对象即可获取,比如在规则文件的then中直接通过如下形式便可获取Rule名称。
drools.getRule().getName();
上述代码没错,直接使用drools即可,不用定义和获取,直接拿来就用。
这样虽然能够获得规则名称,但前提条件是规则得触发,然后获得名称之后,通过一定形式的Fact对象即可返回到调用方。但如果在执行之前就想获得规则的列表信息呢?
这就回到了第一种情况:获得规则列表。
获得规则名称列表
这里我们以KieSession为对象的入口来进行获取,对应的代码片段如下:
Collection<KiePackage> kiePackages = kieSession.getKieBase().getKiePackages(); for (KiePackage kiePackage : kiePackages) { Collection<Rule> rules = kiePackage.getRules(); for (Rule rule : rules) { System.out.println(rule.getPackageName() + " : " + rule.getName()); } }
也就是说通过KieSession获得KIEBase,然后获得所有的packages,在KiePackage对象中存储了它下面的规则(Rule)列表信息。
然后再对Rule列表进行遍历,即可获得对应的规则及规则所在的包等信息。
当然,如果你还想获得其他时机的规则名称,也可以通过添加监听器(Listener)来进行监听,同时获得事件触发前后对应的规则情况。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接