疯狂Activiti6.0连载(16) Drools介绍与运行
本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.****.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.****.net/boxiong86/article/details/78608585
Drools介绍与运行
Drools概述
为了能适应各种业务规则的变化,能让业务人员能直接参与业务规则的管理,降低系统的成本,规则引擎应运而生。使用规则引擎可以将业务规则与应用系统进行分离,让规则引擎变成一个独立的逻辑组件,从而降低了应用程序的复杂性与扩展成本。一个规则引擎,能够接收数据输入,并根据这些数据进行业务规则解析,最终作出业务决策。
目前在Java领域的规则引擎有JBoss Drools、Mandarax、OpenRules、JEOPS等,本章所讲述的就是JBoss旗下的Drools,当前版本的Activiti只支持该种规则引擎。
规则引擎Drools
Drools原来是Codehaus下的一个开源项目,后来纳入到JBoss下。Drools实现和扩展了Rete算法,Rete算法由Charles Forgy博士于1978年在其论文中提及,1982年发布了一个简单的版本。Rete算法主要包括规则编译和运行时执行两部分,Drools实现这种算法时,让其具有了面向对象的特性,Drools实现的Rete算法,称之为ReteOO,Rete算法就好像一个规则处理大脑。除Rete算法外,Drools还使用了Leaps算法,该算法主要用于进行规则的过滤。Drools的规则生产系统(Production System)结合Rete和Leaps算法,Rete算法负责处理与产生规则,Leaps算法则加快此过程。
使用Drools可以达到业务逻辑与数据分离的效果:使用对象来保存数据,使用规则文件来定义业务逻辑,这将会从根本上解决程序与业务逻辑之间的耦合,更进一步,可以动态定义规则文件,让应用程序变得更加灵活。除此之外,Drools的规则语法简洁明了,可以使用以下的语句定义一个规则:
when
条件
then
行为
Drools的规则会被定义在一份规则文件中,一般情况下,规则文件的后缀为“.drl”,一份规则文件可以包含多个规则或者方法,规则文件的语法,将会在本章的第3小节讲解。
Drools下载与安装
JBoss Drools在笔者成书时所发布的最新版本为7.0.0.Final,本书所使用的是7.0.0.Final版本。可以从以下地址下载Drools:
https://download.jboss.org/drools/release/7.0.0.Final/drools-distribution-7.0.0.Final.zip
下载完成后,得到drools-distribution-7.0.0.Final.zip压缩包,解压后得drools-distribution-7.0.0.Final目录,该目录下有以下子目录:
binaries:存放所依赖的第三方jar包和Drools编译后的jar包。
examples:Drools项目自带的例子。
javadoc:Drools的Java API文档。
osgi-binaries:OSGI环境下所使用的包。
sources:存放Drools源代码的jar包。
除了发布的项目外,Drools还提供了相应的Eclipse插件,插件的下载地址如下:
https://download.jboss.org/drools/release/7.0.0.Final/droolsjbpm-tools-distribution-7.0.0.Final.zip
下载并解压后,得到droolsjbpm-tools-distribution-7.0.0.Final目录,在安装Eclipse插件时,需要从本地进行安装,选中“droolsjbpm-tools-distribution-7.0.0.Final/binaries/org.drools.updatesite”目录即可。
图14-1完成Drools Eclipse插件安装
开发第一个Drools应用
在对Drools有初步认识并安装好Drools的环境后,本小节将带领读者开发第一个Drools应用。本小节的内容包括建立Drools的开发环境、编写一个最简单的规则,最后再使用最基本的Drools API来加载和运行该规则。有关更详细的Drools语法与API的介绍,将会在本章的下面章节中讲述。
建立Drools环境
本例与前面的Activiti案例一样,在Eclipse中建立一个普通的Java工程,然后通过main方法来运行案例。本书使用的Drools包,均存放在common-lib/lib/drools下,读者使用时可以引用该目录下的jar包。图14-2是第一个Drools工程的结构。
图14-2项目结构
编写规则
Drools的规则文件一般情况下是以“.drl”为后缀,在一份规则文件中可以指定多个规则、查询或者函数,也可以定义一个导入的资源或者属性,这些资源或者属性可以被规则使用。如果在一个项目中存在大量的规则,那么可以将这些规则保存到不同的文件,针对该情况,官方文档建议使用“.rule”作为这些规则文件的后缀。代码清单14-1定义了一个简单的规则与对应的Person类。
代码清单14-1:
codes\14\14.2\first-drools\resource\rule\first.drl
package org.crazyit.drools
rule "Test Rule"
when
Person(name == "Crazyit");
then
System.out.println("Welcome to Drools");
end
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
代码清单14-1中,使用package关键字字义了该规则文件的包名,在该文件中只定义了一个业务规则,名称为“Test Rule”,当Person对象的name属性值等于“Crazyit”时,该规则就会被匹配到,然后会执行then语句,本例中then语句仅仅在控制台中输出“Welcome to Drools”。
京东购买地址:https://item.jd.com/12246565.html
本文节选自《疯狂Workflow讲义(第2版)》
工作流Activiti6电子书:http://blog.****.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.****.net/boxiong86/article/details/78608585
本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti