Drools开发手册

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Drools开发手册Drools规则引擎开发手册第1页共44页目录1DROOLS简介.............................................................................21.1传统开发的问题........................................................................21.2DROOLS优势............................................................................22DROOLS开发环境.........................................................................32.1ECLIPSE开发...........................................................................32.2GUVNOR开发............................................................................53DROOLS基础.............................................................................63.1DROOLS之HELLOWORLD.....................................................................63.2DROOLS语言...........................................................................133.2.1规则文件........................................................................133.2.2规则定义........................................................................133.2.3LHS(规则条件)...................................................................143.2.4RHS(规则结果).................................................................173.2.5规则属性........................................................................183.2.6关键字..........................................................................193.2.7注释............................................................................20Drools规则引擎开发手册第2页共44页1Drools简介随着开发的系统越来越复杂,我们需要去实现各种复杂的业务流程和业务决策。然而传统的开发语言如Java、C#在处理这些流程和决策时并不能做的很好,我们可以通过Drools业务规则引擎取而代之。Drools规则引擎在电信、金融业有广阔的应用空间。是基于CharlesForgy的RETE算法的开源规则引擎实现。1.1传统开发的问题·企业系统经常是多层开发,比如可分为表现层、业务逻辑层和持久层,业务逻辑层是应用系统的核心部分,决定着业务流程和业务决策。软件系统开发及上线的过程中客户经常会提出一些新的业务需求或想法,所以业务逻辑层的业务流程及决策经常会发生改变,可能比其它层变动会更多。传统开发语言如Java、C#面对复杂的业务流程时最常用的做法就是使用if/else,设想一下,如果业务够复杂,那么系统中会出现大量的if/else存在于代码中,伴随着业务需求的变更,这无疑是系统维护人员的恶梦。·业务人员不了解传统开发语言,无法参与软件系统的设计和维护,以后系统上线以后,业务需求发生变更时,需要开发人员进行修改,也会增加软件的维护费用。1.2Drools优势·Drools比传统开发语言易于理解,语法简单。·可维护性,业务人员可以参与进来进行软件前期设计和软件后期维护。·可扩展性,可以任意删除或新增规则。第1章第2章Drools规则引擎开发手册第3页共44页2Drools开发环境本文档以Drools5为例,目前有两种开发环境:Eclipse开发,需要安装eclipse插件。Guvnor开发,Guvnor的前身是BRMS(BussnissRuleManageSystem:业务规则管理系统,Drools5.0后改了名字)。Drools5开发推荐使用sunjdk1.5或以上版本。2.1Eclipse开发·安装drools的eclipse插件,下载地址:,下载插件的版本要和开发时使用的Drools版本保持一致。·安装的eclipse插件还有GEF(GraphicalEditingFramework:图形编辑框架),这个插件支持Drools在eclipse里面可视化编辑,是必不可少的,下载地址:。在eclipse的help菜单里面查看插件是否成功安装,如果成功的话在eclipse插件管理里面应该能找到,否则说明插件安装不正确,如图:插件安装完成以后就可以开发Drools规则了,点击“File”菜单新建工程,可以看到有Drools选项,如图:Drools规则引擎开发手册第4页共44页这也进一步说明了插件是安装成功的,否则是看不到的。·下载Drools需要的binaries文件,下载地址:这相当于Drools的运行环境,下载好后,可以放在电脑硬盘任意路径,不过需要在eclipse的Window菜单的Preferences中指定,如图:上面三步做好后,就可以在eclipse里开发Drools规则了。Drools规则引擎开发手册第5页共44页下面讲解的Drools大多都是在Eclipse下面演示的。2.2Guvnor开发Guvnor之前的名字叫BRMS(业务规则管理系统),顾名思义,是用来管理规则的系统。他提供了可视化界面供业务/开发人员设计维护规则,使业务人员可以脱离eclipse这个JavaIDE,而仅仅通过任意一台电脑就可以访问,这是业务人员很高兴看到的。Guvnor的Drools规则开发请参考《Guvnor开发手册》。Drools规则引擎开发手册第6页共44页3Drools基础3.1Drools之HelloWorld每学习一种语言大家都习惯了从最简单入手,那我们就用Drools来写一个HelloWorld,初步了解一下Drools5给我们带来了什么。·新建Drools工程:我们在Eclipse里面新建Drools工程,如图:第3章Drools规则引擎开发手册第7页共44页点击DroolsProject,新建工程,用Eclipse建立Drools工程时可以生成一个简单的DroolsDemo,只要在创建时勾选可选项,如图:Drools规则引擎开发手册第8页共44页然后点击“Finish”,就完成了DroolsDemo的创建,一个简单的HelloWorld就创建好了,感觉这个插件做的很人性化的,这个HelloWorldDemo完全是为了新手准备的,如图:上图就是eclipse自动生成的DroolsDemo工程,看上去很简单,其中只包含了一个规则文件(Sample.drl)和一个测试文件(DroolsTest.java)DroolsTest包含了一个pojo类Message,如图Drools规则引擎开发手册第9页共44页先打开DroolsTest.java,看看规则文件是怎么加载的,KnowledgeBase是一个管理规则、进程、内部类型的接口,Knowledge定义(规则、进程、内部类型)被分组到了一些KnowledgePackage中,这些Knowledge定义可以被增加或删除,KnowledgeBase的主要目的是存储和重用这些Knowledge定义,因为他们的创建是非常昂贵的。KnowledgeBase提供了创建session的方法,session的创建是轻量级的,默认情况下,KnowledgeBase维护了被创建的sessions的一个引用,以适应在运行时更新KnowledgeBase。Drools有一个这个接口的实现,这个实现是支持序列化的,我们可以重用这个可序列化的实现而不用每次都创建一个新的,这个实现基于Rete算法。KnowledgeBuilder负责创建一些KnowledgePackage,如果在创建时有任何错误的话,我们可以通过hasErrors()和getErrors()来得到错误信息。KnowledgeBase是通过静态的readKnowledgeBase()方法得到的,如图:Drools规则引擎开发手册第10页共44页从上图看到,一个新的KnowledgeBuilder被创建,规则文件Ssmple.drl通过KnowledgeBuilder的add方法加入进来,规则文件从类路径中读取并被ResourceFactory转化成了Resource,除了上面的加载方法外,规则文件还可以从一个一般的URL、字节数组、java.io.InputStream、java.io.Reader或java.io.File加载。使用Guvnor是开发Drools规则时加载规则文件并不是使用上面的类路径加载方法,具体内容请参考《Guvnor开发手册》。规则加载流程如下:我们再来分析一下测试内容:Drools规则引擎开发手册第11页共44页KnowledgeBase创建了一个StatefulKnowledgeSession接口。StatefulKnowledgeSession是一个主要的Drools规则引擎交互接口,它提供insert、update、retract方法来操作用户定义的对象,它可以为session定义全局变量,并且有一个临时的KnowledgeBase引用。它的api中最让人们感兴趣的是fireAllRules()方法,它用来执行所有的被加载的规则,正如数据库连接一样,当StatefulKnowledgeSession使用完毕后,不要忘了调用它的dispose()方法,否则这个对象不能被垃圾回收掉,可以看到上图中并没有这个方法,说明eclipse自动生成的程序还是不够完善的。KnowldgeRuntimeLogger就不做介绍了,它是一个日志记录对象。上图中,new了一个Message对象,设置它的message属性为“HelloWorld”,status属性为Message.HELLO,然后调用session的insert()方法,把这个Message对象插入到session中,最后调用fireAllRules()方法执行规则。DroolsTest.java分析完毕,再来分析一下规则文件的定义,这里只做简略的分析,规则语法内容后面具体介绍。Drools规则引擎开发手册第12页共44页定义一条规则是以关键字“rule”开头的,rule后面是规则的名字,规则名字在一个包内不能重复,下面when表示规则执行的条件,then表示规则执行的动作。可以看到上图定义了两条规则:(蓝色字体为实际判断条件)规则1:条件:如果s

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功