2

Drools - 如何从具有不同事实的多个 DRL 文件中触发多个规则?

我是 Drools 的新手。我有多个事实,每个都与不同的 DRL 文件相关联。如何从单个 java 类或单个会话中触发具有不同事实的所有规则?可能吗?或者应该将不同的事实句柄从不同的java类加载到不同的会话中来做到这一点?

4

2 回答 2

2

您还可以修改 kmodule.xml 以在 kbase 属性中包含所需的资源(drl 或 xls 文件)。您应该设置的属性是

<kbase name = "Foo" packages="resource_package1, resource_package2,...,resource_packagen"/>.

您还可以将其设置为all意味着您将包括所有项目的资源。通过创建一个会话并触发它,您的所有规则都用火并根据它们的显着性运行。

于 2016-07-07T13:46:42.040 回答
1

将所有 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();

希望能帮助到你,

于 2013-05-16T14:55:06.547 回答