drools支持添加三种监听器,议程事件监听器 AgendaEventListener、规则运行时事件监听器RuleRuntimeEventListener和执行流程事件监听器ProcessEventListener(以上中文名字是笔者自己起的,姑且这么叫,方便后边的理解),这三种监听器可以给开发者带来很多“后门”操作,譬如监控规则触碰情况,监控规则运行的节点个数,监控规则运行时节点数据等。
1、AgendaEventListener 议程事件监听器
这样我们就可以利用beforeMatchFired、afterMatchFired两个方法做很多事情,譬如让日志采集系统采集我们打印的规则匹配的数据做商业报表,又或者匹配上规则时触发报警动作等。
下边其他方法都是在插入Fact时触发的一些规则,有兴趣的可以自行查阅文档,或者自己动手试下
2、RuleRuntimeEventListener 规则运行时事件监听器
这个监听器就是监听我们的Fact的变化,插入、更新和删除,目前笔者在用的时候也只是打印了日志,如果你有场景在用这个监听器也可以品论区介绍一下哈
3、ProcessEventListener 执行流程事件监听器
这个监听器很特殊,笔者在用的时候,同上边两个监听器一样,通过kieSession.addEventListener(ProcessEventListener)注册监听器,但就是不触发事件,于是查看了下源码,如下:
这个监听器只有在使用jbpm工作流时才会触发
这样的好处就是,当demo1条件更改后,demo2规则也会同时生效,会大大降低维护难度。
其实完全可以写两个规则,因为那样会更清晰。