【问题标题】:Start drools with separate DRL files使用单独的 DRL 文件启动 drools
【发布时间】:2015-08-28 08:58:16
【问题描述】:

我必须使用单独的 drl 文件为不同的类启动流口水。

我的第一个代码如下所示:

KieServices ks = KieServices.Factory.get();
                KieContainer kContainer = ks.getKieClasspathContainer();
                KieSession kSession = kContainer.newKieSession("ksession-rules");

 for (AccessA access : listA) {
                    FactHandle fh = kSession.insert(access);

                    kSession.fireAllRules(1);
                    kSession.delete(fh);
                }

AccessA - AccessD 的规则文件夹中有一些 drl 文件

如何为特殊访问触发这些单独的规则?

【问题讨论】:

    标签: java drools rule-engine rule


    【解决方案1】:

    您有两个选择 - 但请参阅最后一段。

    首先:为四个“访问”类别中的每一个创建单独的知识库和单独的会话。

    第二:将四个类别的规则放入四个不同的议程组中,并在插入事实之前确定重点。

    但是由于来自四个类别的事实是四个不同类 AccessA、AccessB、AccessC 和 AccessD 的对象,因此没有理由过度设计此规则库。模式将反映类名,因此当插入 AccessA 类的事实时,不会激活 B、C 和 D 的规则。

    【讨论】:

    • 谢谢!我怎样才能插入一个类的事实?我只从上面的代码开始,我遇到了问题,因为对象匹配来自不同 drl 文件的不同规则。我是否添加了一些代码来指定必要的 drl 文件?
    • 如果我使用议程组,我必须添加以下代码。它是否正确?议程议程 = ksession.getAgenda();议程.getAgendaGroup("AccessA").setFocus();
    • 我理解您的 AccessA、-B、-C、-D 是不同的 Java 类。如果您没有不同 Java 类的事实,您将不得不使用议程组。 - 是的,它是 getAgenda + getAgendaGroup + setFocus。
    • @laune 在第一个选项的情况下,drools 似乎给出了不正确的结果。问题在这里解释:groups.google.com/forum/#!topic/drools-usage/_4aj6JTfd1M
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多