zoukankan      html  css  js  c++  java
  • drools7 (四、FactHandle 介绍)

    先看代码

    Base.java
    package cn.xiaojf.drools7.base;
    
    import org.apache.commons.lang3.StringUtils;
    import org.kie.api.KieServices;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.KieSession;
    
    public class Base {
        public KieSession getSession() {
            KieServices kieServices = KieServices.Factory.get();
            KieContainer kieContainer = kieServices.getKieClasspathContainer();
            //kmodule.xml 中定义的 ksession name
            KieSession kieSession = kieContainer.newKieSession("all-rules");
            return kieSession;
        }
    
        public KieSession getSession(String agendaGroupName) {
            KieSession session = this.getSession();
            if (StringUtils.isNoneBlank(agendaGroupName)) {
                session.getAgenda().getAgendaGroup(agendaGroupName).setFocus();
            }
    
            return session;
        }
    }
    FaceHandleTest.java

    package day20180123;
    
    import cn.xiaojf.drools7.base.Base;
    import cn.xiaojf.drools7.model.Person;
    import org.junit.Test;
    import org.kie.api.runtime.KieSession;
    import org.kie.api.runtime.rule.FactHandle;
    
    import java.util.logging.Handler;
    
    /**
     * 测试 Facehandler
     * @author xiaojf 2018/1/23 21:35
     */
    public class FaceHandleTest extends Base {
        @Test
        public void test() {
            KieSession kieSession = super.getSession("faceHandleTest");
    
            Person p = new Person();
            p.setAge(30);
    
            FactHandle faceHandle = kieSession.insert(p);
            //触发rules
            int count = kieSession.fireAllRules();
    
            System.out.println(p.getName());
    
            //在 work memory 中的对象描述信息
            System.out.println(faceHandle.toExternalForm());
            p.setAge(10);
    
            //更新work memory 中的对象信息
            kieSession.getAgenda().getAgendaGroup("faceHandleTest").setFocus();
            kieSession.update(faceHandle,p);
            kieSession.fireAllRules();
    
            Person p2 = (Person) kieSession.getObject(faceHandle);
            System.out.println(p2.getName());
          //删除
          //kieSession.delete(faceHandle);
    } }

    faceHandle.drl

    package cn.xiaojf.rules
    
    import cn.xiaojf.drools7.model.Person
    rule "faceHandleTest-less-20"
    agenda-group "faceHandleTest"
    when
        $p : Person(age < 20)
        then
          $p.setName("less 20");
        end
    
    rule "faceHandleTest-more-20"
    agenda-group "faceHandleTest"
    when
        $p : Person(age > 20)
        then
          $p.setName("more 20");
        end

    结果

    D:softjavajdk1.8.0_91injava -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:softJetBrainsIntelliJ IDEA 2017.2.1libidea_rt.jar=9137:D:softJetBrainsIntelliJ IDEA 2017.2.1in" -Dfile.encoding=UTF-8 -classpath "D:softJetBrainsIntelliJ IDEA 2017.2.1libidea_rt.jar;D:softJetBrainsIntelliJ IDEA 2017.2.1pluginsjunitlibjunit-rt.jar;D:softJetBrainsIntelliJ IDEA 2017.2.1pluginsjunitlibjunit5-rt.jar;D:softjavajdk1.8.0_91jrelibcharsets.jar;D:softjavajdk1.8.0_91jrelibdeploy.jar;D:softjavajdk1.8.0_91jrelibextaccess-bridge-64.jar;D:softjavajdk1.8.0_91jrelibextcldrdata.jar;D:softjavajdk1.8.0_91jrelibextdnsns.jar;D:softjavajdk1.8.0_91jrelibextjaccess.jar;D:softjavajdk1.8.0_91jrelibextjfxrt.jar;D:softjavajdk1.8.0_91jrelibextlocaledata.jar;D:softjavajdk1.8.0_91jrelibext
    ashorn.jar;D:softjavajdk1.8.0_91jrelibextsunec.jar;D:softjavajdk1.8.0_91jrelibextsunjce_provider.jar;D:softjavajdk1.8.0_91jrelibextsunmscapi.jar;D:softjavajdk1.8.0_91jrelibextsunpkcs11.jar;D:softjavajdk1.8.0_91jrelibextzipfs.jar;D:softjavajdk1.8.0_91jrelibjavaws.jar;D:softjavajdk1.8.0_91jrelibjce.jar;D:softjavajdk1.8.0_91jrelibjfr.jar;D:softjavajdk1.8.0_91jrelibjfxswt.jar;D:softjavajdk1.8.0_91jrelibjsse.jar;D:softjavajdk1.8.0_91jrelibmanagement-agent.jar;D:softjavajdk1.8.0_91jrelibplugin.jar;D:softjavajdk1.8.0_91jrelib
    esources.jar;D:softjavajdk1.8.0_91jrelib
    t.jar;E:workspacedrools7-demo	arget	est-classes;E:workspacedrools7-demo	argetclasses;E:m2
    epositoryjunitjunit4.12junit-4.12.jar;E:m2
    epositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;E:m2
    epositoryorgkiekie-api7.5.0.Finalkie-api-7.5.0.Final.jar;E:m2
    epositoryorgkiesoupkie-soup-maven-support7.5.0.Finalkie-soup-maven-support-7.5.0.Final.jar;E:m2
    epositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;E:m2
    epositoryorgdroolsdrools-compiler7.5.0.Finaldrools-compiler-7.5.0.Final.jar;E:m2
    epositoryorgkiekie-internal7.5.0.Finalkie-internal-7.5.0.Final.jar;E:m2
    epositoryorgkiesoupkie-soup-commons7.5.0.Finalkie-soup-commons-7.5.0.Final.jar;E:m2
    epositoryorgkiesoupkie-soup-project-datamodel-commons7.5.0.Finalkie-soup-project-datamodel-commons-7.5.0.Final.jar;E:m2
    epositoryorgkiesoupkie-soup-project-datamodel-api7.5.0.Finalkie-soup-project-datamodel-api-7.5.0.Final.jar;E:m2
    epositoryorgantlrantlr-runtime3.5.2antlr-runtime-3.5.2.jar;E:m2
    epositoryorgeclipsejdtcorecompilerecj4.4.2ecj-4.4.2.jar;E:m2
    epositoryorgmvelmvel22.4.0.Finalmvel2-2.4.0.Final.jar;E:m2
    epositorycom	houghtworksxstreamxstream1.4.10xstream-1.4.10.jar;E:m2
    epositoryxmlpullxmlpull1.1.3.1xmlpull-1.1.3.1.jar;E:m2
    epositoryxpp3xpp3_min1.1.4cxpp3_min-1.1.4c.jar;E:m2
    epositorycomgoogleprotobufprotobuf-java2.6.0protobuf-java-2.6.0.jar;E:m2
    epositoryorgdroolsdrools-core7.5.0.Finaldrools-core-7.5.0.Final.jar;E:m2
    epositorycommons-codeccommons-codec1.10commons-codec-1.10.jar;E:m2
    epositoryorgapachecommonscommons-lang33.7commons-lang3-3.7.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 day20180123.FaceHandleTest,test
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    more 20
    0:1:429058804:429058804:1:DEFAULT:NON_TRAIT:cn.xiaojf.drools7.model.Person
    less 20
    
    Process finished with exit code 0

    facehandler 相当于是work memory 中对象的句柄,通过facehandler 可以直接定位、修改、删除操作。

  • 相关阅读:
    各种平衡树板子
    字符串板子
    数学公式/定理/板子整理
    线性筛 板子整理
    set乱搞时需注意的坑点
    可持久化数据结构板子整理(可持久化 线段树/字典树/可并堆)
    洛谷p2483 模板k短路 可持久化可并堆
    p4929 DLX舞蹈链
    百度ai 图像增强与特效
    百度ai php请求获取access_token返回false
  • 原文地址:https://www.cnblogs.com/xiaojf/p/8338206.html
Copyright © 2011-2022 走看看