drools规则引擎初探_第1页
drools规则引擎初探_第2页
drools规则引擎初探_第3页
drools规则引擎初探_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、drools规则引擎初探1drools是什么rool是为量身定制的基于是什么呢?rles的or算法的规则引擎的实现。具有了接口的使得商业规则有了更自然的表达。条规则是对商业知识的编码。一条规则有ttrb个et(d)和个t)()dR)S)oderools允许下列几种)ttrib:utess)lie,)c)ege)d)roolootof,ocdusr)t,io)cti)tio。)ro规则的由一个或多个条件(odt)组成s当所有的条件(Co)dit)都满胆并为真时,将被执行。被称为结果(ose)e和类似于下面介绍几个术语:对新的数据和被修改的数据进行规则的匹配称为模式匹配(tter)t。进行匹配的引

2、擎称为推理机(eree)。被访e问的规则称为rod式匹配算法有下列几种:to,e被推理机进行匹配的数据称为oroore管里被匹配规则的执行。推理机所采用的模,er,re,teo这里注意加红的地方,对数据的修改也会触发重新匹配,即对ore中的数据进行了修改。然后规则引擎大概是这个样子的:这个图也很好理解,就是推理机拿到数据和规则后,进行匹配,然后把匹配的规则和数据传递给ed规则引擎实现了数据同逻辑的完全解耦。规则并不能被直接调用,因为它们不是方法或函数,规则的激发是对or中数据变化的响应。结果(osee即eH作为e完全匹配的steer数据被ssefttor匹配的数据(此时就叫做图中的菱形部分就是

3、在后,和let)十起被放入e中来执行的,中的r进行匹配(确切的说应该是r的)s如果匹配成功这条e,(等待e来负责安排激发t(其实就是执行r的e就会根据冲突解决策略来安排t的执行!顺序。连同和它)S上下面附上droolj规则引擎的执行过程2.rete算法参考链接:rete在拉丁文里是etet的意思,这个算法由rlest博t在他的博士论文里提到。这个算法可以分为两个部分,一个是如何编译规则,一个是如何执行。原话(eetelorteroetooltodr)teeeto.rleo就是如何通过对所有规则进行处理,生成一个有效的辨别网络。而一个辨别网络,则对数据进行过滤,使数据一步步往下传送。数据刚进入网

4、络,有很多的匹配条件,这里可以理解为:逻辑表达式为treor,然后在网络里往下传递的时候,匹配的条件越来越少,最后到达一个终止节点。在这个论文里r2.rete算法描述了这么几个节点,ode参考链接:rete在拉丁文里是etet的意思,这个算法由rles博士在他的博士论文里提到。这个算法可以分为两个部分,一个是如何编译规则,一个是如何执行。原话(eetelorteroetooltodr)teeeto.rleo就是如何通过对所有规则进行处理,生成一个有效的辨别网络。而一个辨别网络,则对数据进行过滤,使数据一步步往下传送。数据刚进入网络,有很多的匹配条件,这里可以理解为:逻辑表达式为reor,al然

5、后在网络里往下传递的时候,匹配的条件越来越少,最后到达一个终止节点。在这个论文里rarl描述了这么几个节点,ode这里对其中的几个节点做一下简单介绍,另外说一下如何运作的。首先,roonodi所有的对象都可以进入的节点,也是辨别网络的一个入口,这个可以理解为一个虚节点,其实可能并不存在。然后立马进入到e节点,o这是一个对象类型节点。很明显,这里承载的是一个对象,可以理解为是av中的某个nee在这个算法里,这个节点的作用就是为了保证不做一些无用功,什么无用功呢,就是不是对每个规则,进入的对象都要去辨别一遍,而是确定的对象类型,去做跟他相关的辨别,其实就是mac那么怎么做到呢?这里用到了一个asa

6、每次进入网络的对象,都会在这个ma中通过as,找到一个对应的辨别路径去辨别,艮Pma。附上英文原文:(roolsexendseeomepropagationfromeNodetoAlphaaNodeisaddedtoanObjeenanewinstanceenterstheorreaNodefromtheHaseappenode,ratherthanpropagatingtoeacherebyavoiding)unnecessaryliteralchecks.eeNodeitaddstheleralvalueasakeytotheHasodeahaN一个图来说明:odesa所有经过e的对象:都

7、会走到下一个节点,下一个节点可以是下面的几种:Iaodesendaereaode后面两个节点是Iaode点的一些变种,Iaode点是用来判断一些条件的。可以理解为一些逻辑表达式的计算。下面开始上图:-这个图就是传递进一个ees对象,然后依次判断是否满足条件:判断name是否是eddar如果判断通过了,继续判断sren是否是sron这是最简单了一种情况了,这里附上对应的规则描述,后面会继续讲解:rleeessleeneeseeesenameeddarsrensronthenend3maven依赖这里列了一些后面的一些例子需要用到的maven依赖构建a虚拟文件系统,关联deson和dr文件,很关键

8、dependenorg.kiekie-api/dependenc规则引擎核心包,里面包含了引擎和引擎dependencyorg.drools/groupIddrools-core/dependencdependencyorg.drools/groupIddrools-compiler/dependenc!决-策-表依赖-dependencyorg.drools/groupIddrools-deciiontables/artifactId/dependencdependencyorg.drools/groupIddrools-templates/dependenc4.规则文件:.drlorxls

9、我们一般用到的也就这两种形式,一个是dr文件,是droolj规则引擎提供的最原生的方式,语法很简单,具体语法见还有一个是决策表,决策表可以是ds也可以是sv我们一般用xlst匕较多。而且好理解。xls就是一个ex(文件。s在使用的过程中,遇到很多坑,其中一个最大的坑是ma系统的问题,这里后面会安利。drl文件首先来看下dr文件,这个在第条讲解node的时候已经提到过了。举例:rleaeenstdenttdentaetenstdentaeendrulenameMaxwhen$student:Student(name=max)then$Max();retract($stud

10、ent);end简单说明:以第一个rl为例 aca定义了规则文件的一个命名空间,和a中的acag5关。 io这里可以有多个,就是在规则文件里引用到的a类。 rl(用来定义一个规则,这里名字不可重复,后面跟一个e关键字,翻译过来就是,规则名ae,当满足 e和te之间是逻辑表达式,也就是辨别条件,其中stdenttdent这里其实包含了两个意思,一个是满足ae的tde对象,一个是把这个对象赋值给stde变量,这样后面就可以引用这个变量了。逻辑表达式写在小括号里,如果是多个条件,可以用逗号分隔,如stdenttdentaenaea te和end之间来定义action即当满足ae的时候,做什么操作,这

11、里可以像在a方法里一样,调用任何一个a类的方法,只要io了这个类且在前面定义了这个变量第二个例子可以看到有个retractst0这里是用到了droolj内部提供的一个函数,具体见后续关于drools吾法介绍的博客决策表(decisiontab)决策表就是一个ece文件,可以是ls暂不支持或者cs是个表格,看上去也很直观,即便是不懂代码的人看了也能看懂,不像dr文件那么多语法。关键的一点是:decisiontabl也是最终转成dr文件来让drools规则引擎来解析执行的。到ls的转换这个在后面的i会说到。直接上图吧这里可以暂时忽略那些背景色,只是为了好区分没个模块的作用这里忽略文件开始的空行,从

12、有数据的第一行开始解释说明:第一行第一列:le第二列。这里le可以省略的,累似dr文件中的acae第二行,第一列:第二列具体的a%这里和dr文件里的相对应,多个引用类用逗号分隔第三行,是个对这个决策表的说明第四行,第一列:leableirstecision这一行e艮关键指明这是一个决策表,并且下面的几行都是具体的规则,就好比上面几行是些准备条件,下面才是真正干活的地方,这里来个说明第五行,行,这一行可以有两种列名:。列就是drl里的辨别条件,则是具体的操作,即满足前面几列的的条件后,会执行什么操作,这里一定在前面,可以有多个列,单个里的多个操作用逗号分隔,末尾要加分号结尾这里很重要,不然会有解析错误第六行,紧挨着的一行,可以在这里声明下面要用的到对象,对应dr文件里的stdenttdent第七行,是辨别条件逻辑表达式,如:stdentete则对应da里

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论