第 87 章 决策引擎事件监听程序和调试日志记录
在执行操作时,决策引擎会生成事件,如事实插入和规则执行。如果您注册事件监听程序,则决策引擎会在执行活动时调用每个监听程序。
事件监听程序具有与不同类型的活动对应的方法。决策引擎将事件对象传递给每个方法;此对象包含有关特定活动的信息。
您的代码可以实施自定义事件监听程序,您还可以添加和删除注册的事件监听程序。这样,您的代码可以收到决策引擎活动的通知,您可以将日志记录和审核工作与应用程序的核心分开。
决策引擎使用以下方法支持以下事件监听程序:
参与事件监听程序
规则运行时事件监听程序
public interface RuleRuntimeEventListener extends EventListener { void objectInserted(ObjectInsertedEvent event); void objectUpdated(ObjectUpdatedEvent event); void objectDeleted(ObjectDeletedEvent event); }
public interface RuleRuntimeEventListener extends EventListener {
void objectInserted(ObjectInsertedEvent event);
void objectUpdated(ObjectUpdatedEvent event);
void objectDeleted(ObjectDeletedEvent event);
}
有关事件类的定义,请参阅 GitHub 存储库。
Red Hat Decision Manager 包括这些监听程序的默认实现: DefaultAgendaEventListener
和 DefaultRuleRuntimeEventListener
。您可以扩展这些实施来监控特定的事件。
例如,以下代码扩展了 DefaultAgendaEventListener
以监控 AfterMatchFiredEvent
事件,并将这个监听程序附加到 KIE 会话。执行规则时代码打印模式匹配(填充):
在日程表中监控和打印 AfterMatchFiredEvent
事件的代码示例
Red Hat Decision Manager 还包括以下决策引擎和规则运行时事件监听程序:
-
DebugAgendaEventListener
-
DebugRuleRuntimeEventListener
这些事件监听器实施相同的受支持的 event-listener 方法,并默认包括一个 debug print 语句。您可以为特定支持的事件添加额外的监控代码。
例如,以下代码使用 DebugRuleRuntimeEventListener
事件监听程序来监控和打印所有工作内存(规则运行时)事件:
监控和打印所有工作内存事件的代码示例
ksession.addEventListener( new DebugRuleRuntimeEventListener() );
ksession.addEventListener( new DebugRuleRuntimeEventListener() );
87.1. 事件监听程序开发实践 复制链接链接已复制到粘贴板!
决策引擎在规则处理过程中调用事件监听程序。调用会阻止决策引擎的执行。因此,事件监听程序可能会影响决策引擎的性能。
要确保中断最小,请遵循以下指南:
- 任何操作都必须尽可能短。
- 侦听器类不能处于状态。决策引擎可以随时销毁并重新创建监听程序类。
- 不要使用依赖于不同事件监听程序执行顺序的逻辑。
- 不要包括与监听器内决策引擎之外的不同实体交互。例如,请勿包含用于事件通知的 REST 调用。一个例外是日志信息的输出,但日志记录监听程序必须尽可能简单。
- 您可以使用监听程序来修改决策引擎的状态,例如更改变量的值。