zoukankan      html  css  js  c++  java
  • FactHandler

    参考https://blog.csdn.net/wo541075754/article/details/78013937

    背景

    在使用具体的业务使用中,我们经常会通代码对Fact对象进行操作,Drools为我们提供了FactHandler来获取对象的句柄,通过此返回值可以对WorkingMemory中Fact对象进行操作。

    实例代码

    规则文件内容:

    package com.rules
    import com.secbro.drools.model.Person

    rule "fact-handler-test"
    agenda-group "fact-handler-group"
    when
    $p : Person(age > 80)
    then
    System.out.println($p.getAge());
    end

    调用测试方法:

    @Test
    public void testFactHandler(){
    KieSession kieSession = this.getKieSession("fact-handler-group");

    Person p = new Person();
    p.setAge(81);

    FactHandle handle = kieSession.insert(p);

    System.out.println(handle.toExternalForm());

    int count = kieSession.fireAllRules();
    System.out.println("Fires " + count + " rules!");

    p.setAge(90);
    kieSession.getAgenda().getAgendaGroup("fact-handler-group").setFocus();
    kieSession.update(handle,p);

    count = kieSession.fireAllRules();

    System.out.println("Fires " + count + " rules!");
    kieSession.dispose();
    }

    上面的实例中,首先通过FactHandler获取WM中Person对象的具体信息。后面又通过FactHandler对WM中Fact对象进行修改,并重新调用规则。

    由于代码中使用的是agenda group,因此重新设置获取焦点。如果未使用此中形式则可不用写此行代码。其他相关FactHandler的使用方法可在此示例上进行扩展延伸。

    当重复使用同一个KieSession对同一个对象二次插入更新就可以使用kieSession.update(handle,p);来实现更新并触发规则

  • 相关阅读:
    java 构建一个简单的菜单
    java JSplitPane
    java 使用ActionListener监控
    java 显示单选按钮
    工作 激情
    明天会更好
    记录
    现在
    嘿嘿
    书籍 知识
  • 原文地址:https://www.cnblogs.com/ffaiss/p/11122650.html
Copyright © 2011-2022 走看看