【问题标题】:Creating multiple KieBase and creating the kmodule programmatically in drools创建多个 KieBase 并在 drools 中以编程方式创建 kmodule
【发布时间】:2017-01-20 00:36:16
【问题描述】:

我在 drools 中有多个规则包,每个包包含不同的规则,我将所有包的规则添加到 kmodule.xml 文件中,一旦我运行我的一个 bpmn(每个规则包都有不同的 bpmn和 ruleflow-grouo) 所有规则都会被触发,即使是不同包和不同规则流组中的规则。我想创建多个 Kiebase,每个都包含相关的 drl 文件(也以编程方式和动态构建 kmodule,而不是通过将它们写入 meta-inf 文件夹),一旦我决定需要哪个,我会将 kiebase 添加到会话中并运行正确的 bpmn。我该如何实现?

【问题讨论】:

    标签: drools drools-flow


    【解决方案1】:

    也许这个 sn-p 可以激发您以自己的方式破解它:

        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    
        String someRules = getRulesFromSomewhere(); // find your rules text here...
    
        kbuilder.add(someRules, ResourceType.DRL);
    
    
        if (kbuilder.hasErrors()) {
            //in case of compiling errors
            for (KnowledgeBuilderError error : kbuilder.getErrors()) {
                LOG.error(error.toString());
            }
        }else{
    
            kSession = kbuilder.newKnowledgeBase().newStatelessKieSession();
    
            //use your stateless ksession here!
        }
    

    在我的情况下,这些“someRules”来自一个数据库查询,该查询根据特定条件从一个表中获取所有规则。您可以轻松地使用此类代码根据不同的操作系统规则集创建多个 kieSession。

    【讨论】:

      【解决方案2】:

      看看this other question。在那里,您可以找到 2 种在 Java 中以编程方式创建 KieBases 的方法。

      希望对你有帮助,

      【讨论】:

      • 我的 drl 不是这样运行的(也不例外)。你知道如何在运行时动态创建 kmodule.xml 而不使用 META-INF 文件夹中的默认值吗?
      • 您可以使用我指出的线程中显示的KieHelper 类以编程方式创建KieBases。我不确定您所说的“我的 drl 不是那样运行”是什么意思...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 2021-05-31
      • 2018-04-29
      • 2015-02-18
      • 1970-01-01
      相关资源
      最近更新 更多