Drools - EventListener

时间:2015-09-12 00:20:07

标签: jboss drools

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

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

  1. 请您提供一些有关如何在我们的设置中实施听众的信息/指导?我将在哪里创建和存储实现事件监听器的Java类/方法?
  2. 调用应用程序如何在会话中插入事件侦听器?它是xml / json有效载荷的一部分吗?
  3. 由于

1 个答案:

答案 0 :(得分:0)

<强> 1。在哪里实现听众?

显然必须用Java实现监听器。我发现将这些实现放在一个单独的maven项目中的一个简单的地方。毕竟,kie-workbench中的一个项目本身就是一个maven项目。因此,您可以创建一个单独的项目(在kie-workbench之外)实现您想要的侦听器,然后将此新项目作为依赖项添加到您的kie-workbench项目中(查看有关如何执行此操作的文档)。

我发现这种方法的唯一问题是,一旦你定义了项目之间的依赖关系,kie-workbench就会扫描它的每一个类以及它所拥有的任何其他依赖项。查看this link了解详情。

所以,如果你的监听器项目没有太多的依赖关系,你应该好好去。请注意,理论上,您可以在监听器项目中添加任何kie / drools依赖项<scope>provided</scope>

<强> 2。如何配置这些监听器?

我经常使用的一个技巧是拥有我称之为&#34;配置&#34;要做这种工作。

A&#34;配置&#34;规则是没有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项目中。

希望它有所帮助,