Drools - 事件监听器

Drools - EventListener

我们计划使用 Drools/JBoss BRMS 6 进行业务规则管理。我们的计划是使用 workbench 编写规则,在多个执行服务器中部署规则包,并允许应用程序通过调用 REST API 来访问规则包。我们在调用应用程序和规则包之间没有任何 Java 包装器或自定义 类。

我正在尝试将一些日志记录合并到规则引擎中。我理解有EventListener接口可以实现。

  1. 请提供一些关于如何在我们的设置中实施监听器的 information/guidance 信息?我将在哪里创建和存储将实现事件监听器的 Java classes/methods?
  2. 调用应用程序如何将事件侦听器插入到会话中?它会成为 xml/json 负载的一部分吗?

谢谢

1.在哪里实现监听器?

监听器显然必须在 Java 中实现。我发现放置这些实现的一个简单位置是在一个单独的 Maven 项目中。毕竟kie-workbench中的一个项目本身就是一个maven项目。所以你可以创建一个单独的项目(在 kie-workbench 之外)实现你想要的监听器,然后将这个新项目作为依赖添加到你的 kie-workbench 的项目中(查看文档怎么做)。

我发现这种方法的唯一问题是,一旦您定义了项目之间的依赖关系,kie-workbench 将扫描它的每一个 class 以及它具有的任何其他依赖关系.检查 this link 了解更多信息。

因此,如果您的侦听器项目没有太多依赖项,您就可以开始了。请注意,理论上,您可以将您在侦听器项目中的任何 kie/drools 依赖项添加为 <scope>provided</scope>

2。如何配置这些侦听器?

我经常使用的一个技巧是使用我称之为 "configuration" 的规则来完成这种工作。

"Configuration" 规则是没有 LHS 的规则(并且,如果您不信任,则显着性很高)。这种规则保证只执行一次。只需确保在与 kie-server 的第一次交互之前调用 fireAllRules(),或者第一次交互总是以 fireAllRules 命令开始。

您的配置规则可能如下所示:

/**
Configures the session's listeners.
**/
rule "[SUB-CONFIG] Listeners Configuration"
salience 1000
when
then
    ((org.drools.impl.StatefulKnowledgeSessionImpl)kcontext.getKnowledgeRuntime()).addEventListener(new MyWorkingMemoryEventListener());
    ((org.drools.impl.StatefulKnowledgeSessionImpl)kcontext.getKnowledgeRuntime()).addEventListener(new MyAgendaEventListener());
end

您可以将此规则放在您的 kie-server 项目中。

希望对您有所帮助,