在drools中以编程方式创建多个KieBase和kmodule

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

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

请查看。在这里,您可以找到两种在Java中以编程方式创建Kiebase的方法


希望能有所帮助,

也许这段代码可以启发您以自己的方式进行破解:

    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来自一个数据库查询,该查询根据特定条件从一个表中获取所有规则。您可以轻松地使用此类代码根据不同的操作系统规则集创建多个会话。

我的drl没有以这种方式运行,没有例外。您知道如何在运行时动态创建kmodule.xml,而不使用META-INF文件夹中的默认值吗?您可以使用我指向的线程中显示的KieHelper类以编程方式创建Kiebase。我不确定你所说的我的drl不是那样运行的。。。