jboss Drools规则引擎-多个.drl文件,用于不同上下文的不同规则集

xjreopfe  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(245)

我正在使用spring Boot drools。我想为不同的上下文维护3个不同的drl文件,因为不同的上下文规则是不同的。在这种情况下,我应该为每个上下文创建3个密钥KieContainer吗?或者可以只在kie容器中处理吗?注意:对于每个上下文,我必须只调用相应的drl规则

@Bean
public KieContainer getKieContainer() {
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newFileResource("ctxt1.drl")));
kieFileSystem.write(ResourceFactory.newFileResource("ctxt2.drl")));
KieBuilder kb = kieServices.newKieBuilder(kieFileSystem);
kb.buildAll();
KieModule kieModule = kb.getKieModule();
KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
return kieContainer;

}
这是我调用规则的方式。在这里我想在会话中调用基于上下文的drl文件规则。如何使用基于KieSession的KieBase?

KieSession kieSession = kieContainer.newKieSession();
kieSession.insert(RequestPOJO);
kieSession.fireAllRules();
kieSession.dispose();
x33g5p2x

x33g5p2x1#

根据有限的描述,听起来像是“不同的上下文”可以通过知识库(KieBase)识别。
您可以使用3个不同的DRL文件创建1个KJAR,确保(例如:通过 Package ),它们对应于3种不同KieBase。
类似(~ L):

<kmodule>
 <kbase name="KBase1" packages="org.acme,org.context1" />
 <kbase name="KBase2" packages="org.acme,org.context2" />
 <kbase name="KBase3" packages="org.acme,org.context3" />
 ...
</kmodule>

然后,您可以创建1个KieContainer,其中包含一个包含“多个上下文”(KieBase)的KJAR。
此时,您可以从KieContainer中使用所需的特定KieBase创建KieSession。

相关问题