Jboss Drools-EventListener
我们计划使用Drools/JBoss BRMS 6进行业务规则管理。我们的计划是使用工作台编写规则,在多个执行服务器中部署规则包,并允许应用程序通过调用RESTAPI来访问规则包。在调用应用程序和规则包之间没有任何Java包装器或自定义类 我正在尝试将一些日志记录合并到规则引擎中。我知道可以实现EventListener接口Jboss Drools-EventListener,jboss,drools,Jboss,Drools,我们计划使用Drools/JBoss BRMS 6进行业务规则管理。我们的计划是使用工作台编写规则,在多个执行服务器中部署规则包,并允许应用程序通过调用RESTAPI来访问规则包。在调用应用程序和规则包之间没有任何Java包装器或自定义类 我正在尝试将一些日志记录合并到规则引擎中。我知道可以实现EventListener接口 请提供一些关于如何在我们的设置中实现侦听器的信息/指导?我将在哪里创建和存储实现事件侦听器的Java类/方法 调用应用程序如何将事件侦听器插入会话?它会成为xml/json
谢谢你。在哪里实现侦听器? 监听器显然必须用Java实现。我发现将这些实现放在一个单独的maven项目中是一个简单的地方。毕竟,kie工作台中的项目本身就是一个maven项目。因此,您可以创建一个单独的项目(在kie workbench之外)来实现您想要的侦听器,然后将这个新项目作为依赖项添加到kie workbench的项目中(查看有关如何做到这一点的文档) 我发现这种方法的唯一问题是,一旦定义了项目之间的依赖关系,kie工作台就会扫描其中的每一个类以及它拥有的任何其他依赖关系。查看更多信息 因此,如果您的侦听器项目没有太多依赖项,那么您应该可以继续。请注意,理论上,您可以在侦听器项目中添加任何kie/drools依赖项,如提供的
2。如何配置这些侦听器?
我经常使用的一个技巧是使用我称之为“配置”的规则来完成这种工作
“配置”规则是一个没有LHS的规则(如果您不信任,则为高显著性)。这种规则保证只执行一次。只需确保在第一次与kie服务器交互之前调用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服务器项目中
希望能有所帮助,1。在哪里实现侦听器?
监听器显然必须用Java实现。我发现将这些实现放在一个单独的maven项目中是一个简单的地方。毕竟,kie工作台中的项目本身就是一个maven项目。因此,您可以创建一个单独的项目(在kie workbench之外)来实现您想要的侦听器,然后将这个新项目作为依赖项添加到kie workbench的项目中(查看有关如何做到这一点的文档)
我发现这种方法的唯一问题是,一旦定义了项目之间的依赖关系,kie工作台就会扫描其中的每一个类以及它拥有的任何其他依赖关系。查看更多信息
因此,如果您的侦听器项目没有太多依赖项,那么您应该可以继续。请注意,理论上,您可以在侦听器项目中添加任何kie/drools依赖项,如提供的
2。如何配置这些侦听器?
我经常使用的一个技巧是使用我称之为“配置”的规则来完成这种工作
“配置”规则是一个没有LHS的规则(如果您不信任,则为高显著性)。这种规则保证只执行一次。只需确保在第一次与kie服务器交互之前调用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服务器项目中
希望有帮助