Drools - 使用不同的事实从多个DRL文件中激活多个规则

时间:2013-05-16 07:43:36

标签: java drools

Drools - 如何使用不同的事实从多个DRL文件中激活多个规则?

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

2 个答案:

答案 0 :(得分:2)

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

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

您还可以将其设置为all,这意味着您将包含所有项目的资源。通过创建一个会话并用火来解雇你所有的规则并根据他们的突出性来运行。

答案 1 :(得分:1)

将所有DRL文件添加到PackageBuilder中,并使用生成的包创建单个KnowledgeBase。然后从该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();

希望它有所帮助,