规则引擎Drools(1)Drools介绍与运行
规则引擎 -- 作用,代码与业务规则分离,当业务规则改变,不影响我们代码,不需要修改代码,也是当业务变化,不需要或减少需要系统升级 --即将规则提取出来,实现代码于业务规则解耦,适应各种业务规则的技术,叫做规则引擎技术
Drools:介绍
Drools安装:下载
http://download.jboss.org/drools/release/7.0.0.Final/droolsjbpm-tools-distribution-7.0.0.Final.zip
或E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤22-26 规则引擎Drools(1)Drools介绍与运行\drools本地插件安装的zip文件--ECLIPSE,IDEA等安装\droolsjbpm-tools-distribution-7.0.0.Final.zip
AND
我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤22-26 规则引擎Drools(1)Drools介绍与运行\drools本地插件安装的zip文件--ECLIPSE,IDEA等安装\droolsjbpm-tools-distribution-7.0.0.Final.zip
解压后
解压下载文件夹,进入“binaries/org.drools.updatesite”目录,将目录下的features和plugins下面的jar包copy到Eclipse下对应目录。然后重启,看到下图就表示成功了
一、 第一个Drools
1.1 参照上图 ,
项目结构
新建 first.drl,Person.java
新建 first.drl,
新建 Person.java
package com.xiangshuai.act.c25;
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
1.2 测试方法及测试JAVA类
PersonTest.java
package com.xiangshuai.act.c25;
import java.util.Collection;
import org.kie.api.io.ResourceType;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.definition.KnowledgePackage;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;
/**
* @author lqx
* 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤22-26 规则引擎Drools(1)Drools介绍与运行
或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤22-26 规则引擎Drools(1)Drools介绍与运行
*
*/
public class PersonTest {
public static void main(String[] args) {
// 创建一个KnowledgeBuilder
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
// 添加规则资源到 KnowledgeBuilder
kbuilder.add(ResourceFactory.newClassPathResource("first.drl",
PersonTest.class), ResourceType.DRL);
// 获取知识包集合
Collection<KnowledgePackage> pkgs = kbuilder
.getKnowledgePackages();
// 创建KnowledgeBase实例
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
// 将知识包部署到KnowledgeBase中
kbase.addKnowledgePackages(pkgs);
// 使用KnowledgeBase创建StatefulKnowledgeSession
StatefulKnowledgeSession ksession = kbase
.newStatefulKnowledgeSession();
// 定义一个事实对象
/*
Person cxy = new Person();
cxy.setName("php"); //输出结果--如果Person的属性name是php,就输出这句php程序员
*/
/*
Person cxy = new Person();
cxy.setName("C++"); //输出结果--如果Person的属性name是C++,就输出这句C++程序员
*/
Person cxy = new Person();
cxy.setName("Java"); //输出结果--如果Person的属性name是Java,就输出这句Java程序员
// 向StatefulKnowledgeSession中加入事实
ksession.insert(cxy);
// 匹配规则
ksession.fireAllRules();
// 关闭当前session的资源
ksession.dispose();
}
}