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


声明:本文转载自https://my.oschina.net/JavaLaw/blog/1576359,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

插播一条广告→2021 ByteDance字节跳动内推←各城市、各方向的岗位都有,大量招人!


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

疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397

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”。

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

疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397

本书代码目录:https://gitee.com/yangenxiong/CrazyActiviti

本文发表于2017年11月21日 10:33
(c)注:本文转载自https://my.oschina.net/JavaLaw/blog/1576359,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1109 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1