有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Drools从具有不同事实的多个DRL文件中触发多个规则

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

我不太会流口水。我有多个事实,每个都与不同的DRL文件相关联。如何从单个java类或单个会话中激发具有不同事实的所有规则?可能吗?或者应该将不同的FactHandle从不同的java类加载到不同的会话中来实现这一点


共 (2) 个答案

  1. # 1 楼答案

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

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

    您还可以将其设置为all,这意味着您将包含项目的所有资源。通过创建一个会话并启动它,您可以使用fire启动所有规则,并根据它们的显著性运行

  2. # 2 楼答案

    将所有DRL文件添加到PackageBuilder中,并使用生成的包创建单个知识库。然后从该数据库创建一个会话并插入所有事实

    编辑:添加代码段

    //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();
    

    希望有帮助