zoukankan      html  css  js  c++  java
  • drools规则引擎笔记(二)

    规则引擎版本,drools6.5.0 final

    eclipse:Neon

    JDK1.8

    今天主要是在规则的when部分加入了多个fact对象。

    对于working memory存在多个fact的情形,其实和单个fact对象是类似的。需要注意的是,我们需要将多个多想都要插入working memory中才行。

    下面是试验的代码,之前我已经在eclipse上安装了drools的插件,所以我的代码是在drools生成的木板上直接进行修改的。

    针对本次试验,重要的几个文件如下

    image

    package com.audi.dto;
    
    public class TestDTO
    {
        private String condition;
        private String action;
        public String getCondition()
        {
            return condition;
        }
        public void setCondition(String condition)
        {
            this.condition = condition;
        }
        public String getAction()
        {
            return action;
        }
        public void setAction(String action)
        {
            this.action = action;
        }
        
    }
    package com.audi.util;
    
    public class TestUtils
    {
        public static String testDrl()
        {
            return "true";
        }
    }

    下面的这段代码是规则的内容(其实语法和java很相似),注意下面的import语句,要在包名的末级加上*号,否则会报错:

    package com.sample
     
    import com.audi.dto.*;
    import com.audi.util.*;
     
    rule "testUtil"
        when
            $util:TestUtils();
            $dto:TestDTO($util.testDrl()=="true");
        then
            $dto.setAction("sucess...");
            System.out.println("------------hhhhhhhhhhhhhhh-------------");
    end

    下面是drools自动生成的xml文件,其实就是配置drools的三种规则文件的方式:

    <?xml version="1.0" encoding="UTF-8"?>
    <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
        <kbase name="rules" packages="rules">
            <ksession name="ksession-rules"/>
        </kbase>
        <kbase name="dtables" packages="dtables">
            <ksession name="ksession-dtables"/>
        </kbase>
        <kbase name="process" packages="process">
            <ksession name="ksession-process"/>
        </kbase>
    </kmodule>

    下面是规则的测试代码,尤其要注意kSession.insert(new TestUtils());这一句,这就是把这个工具类插入working memory的代码,没了它会导致规则的when部分为false,从而导致规则匹配失败。

    package com.sample;
    
    import org.kie.api.KieServices;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.KieSession;
    
    import com.audi.dto.TestDTO;
    import com.audi.util.TestUtils;
    
    /**
     * This is a sample class to launch a rule.
     */
    public class DroolsTestUtil
    {
    
        public static final void main(String[] args)
        {
            try
            {
                // load up the knowledge base
                KieServices ks = KieServices.Factory.get();
                KieContainer kContainer = ks.getKieClasspathContainer();
                KieSession kSession = kContainer.newKieSession("ksession-rules");
    
                // go !
                TestDTO dto = new TestDTO();
                dto.setCondition("test");
                kSession.insert(new TestUtils());
                kSession.insert(dto);
                kSession.fireAllRules();
                System.out.println("------------开始匹配-------------");
                if (null == dto.getAction())
                {
                    System.out.println("------------匹配失败-------------");
                }
                else
                {
                    System.out.println("------------匹配成功-------------");
                    System.out.println(dto.getAction());
                }
            } catch (Throwable t)
            {
                t.printStackTrace();
            }
        }
    
    }

    image

  • 相关阅读:
    Qt 4.x调试器问题,缺失调试助手。
    Qt 如何判断文件是不是一个目录
    Qt 5.7设置调试器
    Qt 无法解析外部文件2001,2019之类的
    TCP/UDP socket
    Qt 5.7 版本+2013VS环境配置
    骑行、318总结心得啊经验什么的
    蓝牙硬件交互数据传输Demo
    iOS蓝牙开发总结-4
    iOS蓝牙传输数据演示-3
  • 原文地址:https://www.cnblogs.com/audi-car/p/6828595.html
Copyright © 2011-2022 走看看