Drools(JAVA规则引擎)开发指南
操作系统——Win10
JDK版本——1.6.0_18
开发工具——MyEclipse2014
drools-distribution-6.4.0.Final
一. 下载源码包
解压后如下:
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与规则匹配为青年人
最后,动手尝试一下吧。