疯狂Activiti6.0连载(16) Drools介绍与运行

来源:互联网 发布:java策略模式 工厂模式 编辑:程序博客网 时间:2024/06/14 05:59

 本文节选自《疯狂工作流讲义(第2版)》

京东购买地址:https://item.jd.com/12246565.html

工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585

Drools介绍与运行

Drools概述

为了能适应各种业务规则的变化,能让业务人员能直接参与业务规则的管理,降低系统的成本,规则引擎应运而生。使用规则引擎可以将业务规则与应用系统进行分离,让规则引擎变成一个独立的逻辑组件,从而降低了应用程序的复杂性与扩展成本。一个规则引擎,能够接收数据输入,并根据这些数据进行业务规则解析,最终作出业务决策。

目前在Java领域的规则引擎有JBoss DroolsMandaraxOpenRulesJEOPS等,本章所讲述的就是JBoss旗下的Drools,当前版本的Activiti只支持该种规则引擎。

规则引擎Drools

Drools原来是Codehaus下的一个开源项目,后来纳入到JBoss下。Drools实现和扩展了Rete算法,Rete算法由Charles Forgy博士于1978在其论文中提及,1982年发布了一个简单的版本Rete算法主要包括规则编译和运行时执行两部分,Drools实现这种算法时,让其具有了面向对象的特性,Drools实现的Rete算法,称之为ReteOORete算法就好像一个规则处理大脑Rete算法外,Drools还使用了Leaps算法,该算法主要用于进行规则的过滤。Drools的规则生产系统(Production System)结合ReteLeaps算法,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包。

     examplesDrools项目自带的例子。

     javadocDroolsJava API文档。

     osgi-binariesOSGI环境下所使用的包

     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.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585

本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti

原创粉丝点击