2016-09-12 317 views
0

我在drools中爲規則創建了多個包,每個包都包含不同的規則,並且我將所有包的規則添加到了kmodule.xml文件中,並且一旦我運行了其中一個bpmns(每個規則包都有一個不同的bpmn和ruleflow-grouo),即使是不同的包和不同的ruleflow-group中的規則也會被解僱。我想創建多個Kiebase,每個包含相關的drl文件(也可以編程方式動態構建kmodule,而不是通過將它們寫入meta-inf文件夾中),一旦我決定需要哪一個,我會將kiebase添加到會話中並運行正確的bpmn。我怎樣才能實現這個?在drools中創建多個KieBase並創建kmodule程序

回答

0

看看this other question。在那裏你可以找到兩種以編程方式在Java中創建KieBases的方法。

希望它能幫助,

+0

我的drl沒有以這種方式運行(沒有例外)。你知道我如何在運行時動態地創建kmodule.xml文件,而不需要使用放在META-INF文件夾中的默認文件? – arielb

0

也許這個片段可以激發你攻擊它自己的方式:

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。