Drools - 如何从具有不同事实的多个 DRL 文件中触发多个规则?
我是 Drools 的新手。我有多个事实,每个都与不同的 DRL 文件相关联。如何从单个 java 类或单个会话中触发具有不同事实的所有规则?可能吗?或者应该将不同的事实句柄从不同的java类加载到不同的会话中来做到这一点?
您还可以修改 kmodule.xml 以在 kbase 属性中包含所需的资源(drl 或 xls 文件)。您应该设置的属性是
<kbase name = "Foo" packages="resource_package1, resource_package2,...,resource_packagen"/>
.
您还可以将其设置为all
意味着您将包括所有项目的资源。通过创建一个会话并触发它,您的所有规则都用火并根据它们的显着性运行。
将所有 DRL 文件添加到 PackageBuilder 中,并使用生成的包创建一个知识库。然后从该 kbase 创建一个会话并插入所有事实。
--编辑:添加代码片段
//Add all your drls to a single kbuilder
kbuilder.add(xxx.drl);
kbuilder.add(yyy.drl);
kbuilder.add(zzz.drl);
//Create a kbase using the generated kpackages
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
//Create a session containing all the rules you have in all your .drl files
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
//Insert all your objects
ksession.insert(new XXX());
ksession.insert(new YYY());
ksession.insert(new ZZZ());
//fire all the activated rules
ksession.fireAllRules();
希望能帮助到你,