将规则动态添加到drools引擎中

时间:2014-08-11 20:32:00

标签: dynamic jboss drools

我有一个独立的java应用程序,它将与我在节点上运行的Web应用程序进行交互。我试图通过Web UI动态添加新规则。到目前为止,我无法弄明白,如何创建和添加规则。任何有关正确方向的建议都会有所帮助

2 个答案:

答案 0 :(得分:1)

这基本上是https://stackoverflow.com/questions/25036973的副本,所以以下基本上是我对这个问题的答案的重复......

最好只看一下Drools示例源代码。例如,KieFileSystem example显示如何从String创建规则并启动包含它的会话。

要点是您创建了一个KieServices,其中包含一个虚拟文件系统。然后,您将规则添加到该文件系统。有点像以下内容:

KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kfs = ks.newKieFileSystem();
kfs.write("src/main/resources/my/rules/therule.drl", "The source code of the rule");
KieBuilder kb = ks.newKieBuilder(kfs);
kb.buildAll();

答案 1 :(得分:0)

you can add multiple Compiled rule DRL files like 
knowledgebuilder.add(new ByteArrayResource(compiledDRL.getBytes()),ResourceType.DRL);


Get all the knowledgePackages and fire the all rules 

knowledgeBase kbase = knowledgeBaseFactory.newKnowledgeBase();
kbase.addknowledgePackages(knowledgeBuilder.getKnowledgePackages());

knowledgeSession ksession = kbase.newStatefullKnowledgeSession();
ksession.insert(inputObject);
ksession.fireAllRules();
ksession.dispose();