Drools规则引擎的使用总结_第1页
Drools规则引擎的使用总结_第2页
Drools规则引擎的使用总结_第3页
Drools规则引擎的使用总结_第4页
全文预览已结束

下载本文档

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

文档简介

1、精选文档 规则引擎。让它来作为项目中有关模式分析和关键词匹配的任务。但后来,因为某种原因, 还是撇开了 Drools。现将这个过程中使用 Drools的一些经验和心得记录下来。 (一)什么时候应该使用规则引擎 这实际是一个技术选型的问题。但这个问题又似乎是一个很关键的问题(一旦返工的话, 你就知道这个问题是多么重要了)。不知大家有没有过这样的经验和体会。往往在项目开始 的时候,总会遇到应该选用什么技术?是不是应该使用最新的技术?或者应该选用什么技术 呢(PS:现在计算机软件中的各种技术层出不穷,具有类似功能的技术很多)? log 不管怎么样,这些问题总会困扰着我。比如,这次的这个项目。项目要求

2、是要在一些 文件中(这些log文件都是很大的应用系统所产生的,但由于legacy的原因,log本身的维 护和规范工作一直没有得到改善,所以想借助于一些外部应用对这些log做以分析和清洗) 抽取出有用的信息。 放到一个单独的drl文件里)并可以用规则 于是,第一个想到的就是,这是一个文本挖掘类的项目。但又想,要抽取有用信息,必 须得建立一些规则或 pattern (模式)。所以,我第一个想到了规则引擎。因为这里面要建 立好多规则,而这些规则可以独立于代码级别( 引擎去解析和执行。另一个重要的原因是,我原来用过,比较熟悉。这样,也可以节省开发 时间吧。于是,好不犹豫的就开始做了Demo. 但事实上

3、,在经历了一个多星期的编码、测试后,我发现运用规则引擎实在是太笨拙了。 (1)首先必须建立一些数据模型。通过这些模型来refer规则文件中的LHS和Action。 (2 )还要考虑规则的 conflict。如果有一些规则同时被触发,就要考虑设定规则的优先 级或者是设定activiation-group 来保证在一个group中的规则只有一个规则可以被触发。 (3)对于 流规则group ruleflow-group 的使用。如果要控制在workingmemory 中的规 则被触发的顺序,则可以将这些规则分组。然后,通过规则建模的方式来实现。但这也添加 了一定的effort。修改或者更新不大方便

4、。 所以,基于上述体会,我更认为规则引擎更适用于那些对非流程性规则匹配的应用。当 然,Drools也支持对流程性规则的建模过程。但,这也许不是最好的方式。 (二) Drools规则引擎的使用杂记 (1) Fact的变更监听。在Drools里,如果一个Fact通过规则而改变,则需将这种 改变通知给规则引擎。这里,一般有两种方式:显式和隐式。 显式-在drl文件中通过 up date、modify来通知;在程序中,通过 Fact的引用调用 modifyObject等方法来实现。 隐式-通过在Java bea n实现property Liste ner In terface来让引擎自动监听到属性 值

5、的变化。我更习惯于这种方式。因为,一般看来凡是在规则引擎中添加到fact都是希望 引擎来帮你进行管理的。所以,那它自己看到fact的变化是种很省事的办法。也很简单, 就是用Java bean property 监听的方式。 通过 StatefulSession 来注册。 调用 StatefulSession的某个 instanee 的 insert( Object,true)实现。而这个 object 是一个java bean。其中,要实现 =new P rivate final Prop ertyCha ngeS upport cha nges Prop ertyCha ngeS upp o

6、rt( this ); public void add PropertyChangeListener(final PropertyChangeListener l) this.cha nges.add Prop ertyCha ngeListe ner( l ); P ublic void removeProp ertyCha ngeListe nerfinal Prop ertyCha ngeListe ner I) this.cha nges.fire Prop ertyCha nge( te mp, null,this.te mp ); (2)规则触发的优先级、组设置 往往,在设计我们自

7、己的规则时, 要考虑规则的触发条件。 这不仅限于LHS的条件部分, 还有规则本身被触发的有些设置等等。这里,列出一些比较常用和有效的规则优先级设置方 式,以及需要注意的地方。 A. 通过Salienee方式。此值可正可负。越大优先级越高,也会被引擎首先执行。 drl的同级目录中建立 rf和rfm B. 通过ruleflow-group 方式。实际上,使用这种方式也就是在使用建立规则流的方式。 在Eclipse 3.3 中,Drools提供了建立规则流的插件。要在 两个文件(当然,插件会帮助你建立这些)。 克New Select a wizard Wizards: |typs filter te

8、xt 出凸CVS DoiTiain Specific Language 0 Guided Rule .吨 RuleFlow File -Q Rule Project Q Rule Resoir匚e e EfChpse Made ling Frameucrk D Example EMF McMJel Creation VVizarcte Nejit Fl, ash Cancel 4 选择 RuleFlow File 。 rule flow的代码。 这里,需要注意的一点是要在启动规则引擎的时候,加入启动 Inpu tStreamReader source = new Inpu tStreamRea

9、der(RuleMa nager.class .getResourceAsStream(rule_ path); P ackageBuilder builder = new P ackageBuilder(); builder.add PackageFromDrl(source); builder.addRuleFlow (new Inpu tStreamReader(RuleMa nager.class .getResourceAsStream(rule_fl ow_p ath); Package pkg = builder.get Package。; RuleBase ruleBase =

10、 RuleBaseFactory. newRuleBase(); ruleBase.add Package (p kg); 然后,在每次启动规则引擎的时候,调用如下方法: StatefulSessi on ss; ss.start Pro cess(flow Progress) ss.fireAllRules(); flow的名字。 这个rule flow图中,显示了一个简单的规则流。如RSA就是一个rule-flow的名字。在这 rf和rfm同名 个rule set中可以设定一组rules。这样,就可以分开规则执行的顺序。在于 的另一个drl文件中定义这些组的名字。通过关键字ruleflow

11、-group来表明。 C.通过activation-group 的方式。通过这种方式,可以exclude 一组rule中一旦有一个 rule先被匹配执行。 rule 被invoke,而其它 rule 不会被 execute。同时,可以搭配使用 salienee 关键字来标明 每个rule的优先级,这样就能够使得你想要的一般性概念的 D.在使用ruleflow-group的时候要注意使用lock-on-active true关键字在每个 rule。这 样可以避免一旦有rule被触发,不会造成循环匹配执行。 E.如果在LHS部分,需要调用某个方法来返回真、假值作为判断的一个条件,那么可以= 用ev

12、al函数。 女0, eval(pattern.matched(5,$line.getCurrLine() 其中,pattern是某个加入到 workingmemory 中的一个实例。matched是这个实例所代 表类的一个方法。它返回boolean类型。 (3)Drools规则引擎的使用感受 总之,Drools还是一个很不错的开源规则引擎。现在v4.0以上的版本已经比以前的版本 在速度上有了很大的提升。可以作为我们一般应用程序系统的中间件产品(那些规则不是很 经常改变的系统,已经非流程类规则)。但是,这其中还是需要一些额外的effort来学习它 的使用文档以及整体架构,有一定的学习曲线。 最后

13、,我想一个较好的对于技术使用的Practice就是:首先知道它能为你做什么,它最 好的应用领域,然后再去深入。 (PS:如果谁有使用 Drools的问题,可以联系我! 一起讨论!) 题外话: Drools是规则引擎,主要是用于实现基于规则的专家系统的。而专家系统是什么,要解决 什么样的问题,可能大家不是很清楚。所以在解决问题是,要首先有个全面的了解才行。如 果只是流程型的东西,可以考虑工作流引擎实现。 另外,对话引擎是很复杂的,涉及很多技术,NPL、推理机、知识库,甚至包含整个人工遛 能领域的技术。而其中每个技术又有不同的理论和方法,选择哪个,又如何组合这些技术也 是很复杂的。 而且你很难控制流程式的逻辑 基于条件匹配方式的规则引擎必定存在一个抽象分析的过程

温馨提示

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

评论

0/150

提交评论