【问题标题】:Drools 6.0 dynamically load rules at runtimeDrools 6.0 在运行时动态加载规则
【发布时间】:2014-06-25 21:28:39
【问题描述】:

我想在运行时加载一个 drl 文件。我发现包括 one 在内的帖子适用于 5.0 版,但我不知道如何为 drools 6.0 版做到这一点。

【问题讨论】:

    标签: java drools


    【解决方案1】:

    在 Drools 6 中,您的规则包被部署到 Maven。提供了一个 KieScanner,您可以将其附加到您的 KieContainer。这会按定义的时间间隔轮询您的存储库,以查看软件包是否已更新,如果是,则下载最新的。

    Drools 文档中提供了有关如何定义 KieScanner(包括代码示例)的完整说明:

    https://docs.jboss.org/drools/release/latest/drools-docs/html/ch04.html

    【讨论】:

    • 嗨@Steve,链接无效。如果您不介意,能否提供一个有效的 URL?谢谢。
    • 他们改变了路径……更新的链接现在在上面。
    【解决方案2】:

    我使用了从这两个文档中获取的信息:

    我提出了这个 sn-p,它将/drl/file/path 文件中定义的规则加载到您在最后一行获得的有状态会话中。

        File path = new File("/drl/file/path");
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add(ResourceFactory.newFileResource(path), ResourceType.DRL);
        if (kbuilder.hasErrors()) {
            throw new RuntimeException("Errors: " + kbuilder.getErrors());
        }
        kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    

    某些方法已弃用,因此,不要指望此解决方案在以下版本中有效。

    请仔细检查导入,它们都来自org.kie,而不是来自drools 包。我承认这些导入太多了,但我正在粘贴我正在尝试开发的示例中的代码,所以我的代码中有更多内容,对此感到抱歉。

    导入 java.io.File;

    import org.kie.api.KieServices;
    import org.kie.api.builder.KieBuilder;
    import org.kie.api.builder.KieFileSystem;
    import org.kie.api.builder.KieScanner;
    import org.kie.api.builder.ReleaseId;
    import org.kie.api.builder.model.KieBaseModel;
    import org.kie.api.builder.model.KieModuleModel;
    import org.kie.api.builder.model.KieSessionModel;
    import org.kie.api.conf.EqualityBehaviorOption;
    import org.kie.api.conf.EventProcessingOption;
    import org.kie.api.io.Resource;
    import org.kie.api.io.ResourceType;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.conf.ClockTypeOption;
    import org.kie.internal.KnowledgeBase;
    import org.kie.internal.KnowledgeBaseFactory;
    import org.kie.internal.builder.KnowledgeBuilder;
    import org.kie.internal.builder.KnowledgeBuilderFactory;
    import org.kie.internal.io.ResourceFactory;
    import org.kie.internal.runtime.StatefulKnowledgeSession;
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      您可以在 Drools 6 中找到所需内容的操作指南:http://oncodesign.io/2015/08/10/dynamically-create-rules-using-drools--rule-templates/

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        相关资源
        最近更新 更多