Drools(JAVA规则引擎)开发指南

Drools(JAVA规则引擎)开发指南

操作系统——Win10
JDK版本——1.6.0_18
开发工具——MyEclipse2014
drools-distribution-6.4.0.Final

一. 下载源码包

网址:http://drools.org/
这里写图片描述

解压后如下:
这里写图片描述
binaries:开发jar包
examples:例子
javadoc:开发文档
sources:源码

二. 项目示例

1.创建项目,引入binaries下所有jar包

2.jar包加入项目中

这里写图片描述

3.代码如下

首先创建一个对象

//规则操作的数据对象
public class Student {

    //年龄
    private Integer age;

    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

}

4.创建规则文件drl

//包名 哪个包下的drl规则文件 只是逻辑上的分类 不是实际意义的
package com.droos.test;

//需要进行规则匹配的对象( fact )
import com.drools.test.Student;

//规则名称
rule "A"

            //条件Conditions即LHS(left hand side)
            when
                    Student(age<=20);

            //结果Actions即RHS(right hand side或者consequence)
            then 
                    System.out.println("我是儿童");
end

rule "B"
            when
                    Student(age>20,age<=30);
            then
                    System.out.println("我是青年人");
end

5.创建测试类

public class DroolsTest {

        /* 读取规则 放入规则库 */
        private static KnowledgeBase readKnowledgeBase(){

                /*通过规则收集工厂 派出一个规则收集者来*/
                KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

                /*通过规则收集者 收集规则*/
                knowledgeBuilder.add(ResourceFactory.newClassPathResource("Student.drl"), ResourceType.DRL);

                /*获得规则收集者 收集规则过程中的错误*/
                KnowledgeBuilderErrors errors = knowledgeBuilder.getErrors();

                /*如果error集大于0 说明有错误*/
                if(errors.size()>0){

                    /*遍历error集合*/
                    for (KnowledgeBuilderError error : errors) {
                        /*打印输出错误    */
                        System.out.println("我是规则收集者,收集过程中遇到"+error+"错误");
                    }
                    throw new IllegalArgumentException("Could not parse knowledge");
                }

                /*规则收集者将 规则打包*/
                Collection<KnowledgePackage> knowledgePackages = knowledgeBuilder.getKnowledgePackages();

                /*通过知识库工厂 new一个知识库来加载规则*/
                KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();

                /*用知识库加载规则*/
                knowledgeBase.addKnowledgePackages(knowledgePackages);

                /*返回知识库*/
                return knowledgeBase;
        }

        public static void main(String[] args) {

                //通过readKnowledgeBase方法得到带规则的知识库
                KnowledgeBase knowledgeBase = readKnowledgeBase();

                /* 通过知识库创建一个会话 */
                StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();

                try{

                        Student student=new Student();
                        student.setAge(18);

                        /* 将数据 专业名词叫 fact事实 加入到会话*/
                        ksession.insert(student);

                        /* 执行所有的规则 与事实进行匹配 */
                        ksession.fireAllRules();
                }finally{
                        /* 关闭会话 */
                        ksession.dispose();
                }
        }
}

6.测试

这里写图片描述
setAge为18与规则匹配为儿童

这里写图片描述
setAge为21与规则匹配为青年人

最后,动手尝试一下吧。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值