我为drools规则打了几个包,每个包都包含不同的规则,我添加了所有的包'对kmodule.xml文件的规则,一旦我运行我的一个bpmns(每个规则包都有不同的bpmn和ruleflow-grouo),即使是不同包和不同规则流组中的规则,所有规则也会被触发。我想创建多个Kiebase,每个Kiebase包含相关的drl文件(也以编程方式动态构建kmodule,而不是通过在meta-inf文件夹中编写它们),一旦我决定需要哪个,我将把kiebase添加到会话中并运行正确的bpmn。我该如何实现呢?
答案 0 :(得分:-1)
看看this other question。在那里,您可以找到两种以Java编程方式创建KieBases的方法。
希望它有所帮助,
答案 1 :(得分:-1)
也许这段代码可以激励你以自己的方式破解它:
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。