Drools在网络故障管理系统中的应用
Drools在网络故障管理系统中的应用
1860
2009,30(8)计算机工程与设计computerEngineeringandDesigIl
算法的一个面向对象改进算法,并提供了自己的规则语言。2005年12月,Drools项目以及该项目的主要负责人MarkPmc-tor都加入了JBoss,并且JBoss公司将在2006年的第一个季度开始为其产品提供支持和服务。Drools变身为JBossRules3.0后拥有了更好的规则语法、平民级的DSL语言和基于Eclipse的编辑器,前景明亮。
简单的说,规则引擎由3部分组成:一个反映问题域当前状态的事实库,一个存放规则的规则库和一个进行推理的推理机。Drools规则引擎的工作原理如图l所示,其中,应用程序中出现的事实对象被存储在Drools工作内存中,Drools将工作内存中的对象与已加载的规则库中的规则进行匹配,然后激活所有满足条件的规则,并将激活的规则放入议程中等待执行。
工作内存
规则库
I
l
Drools规则引擎
(改进的Rete算法)
0
I
议程
图l
Dr001s规则引擎的工作原理
规则引擎需要通过应用程序接口(API)的方式嵌入在应用程序中,规则引擎的程序接口至少包含以下几种API:创建规则引擎对象的API、加载和卸载规则集的API、数据操作的API和命令引擎执行的API。Drools中提供有完整的API训,能够非常方便地进行应用程序设计。有关Drools的资料可以访问
JBossRules官方网ht币:,,wmⅣ.jboss.org/获得。JBoss
Rules官方
网提供了如下几个压缩包:
(1)jbossmles.3.o.5-bin.zip(14MB):包含JBossRules的4个核心类库及javadocs。
(2)jbossnlles一3.0.5-bin.withdeps.zip(21MB):带依赖包的jbossmles-3.O.5-bin.zip。
(3)jbossmles一3.O.5-src.zip(23MB):Drools源文件。
“)jbossmles—ex锄ples.3.o.5.src.zip(284KB):Drools示例源
文件。
(5)jbossmles-ide.3.0.5一bin.zip(7MB):一个基于eclipse的集成开发环境DroolsDE。
Dr00ls提供了一个基于Eclipse的IDE,这个DE提供了
Dmols的核心类库及运行Drools所需要的所有依赖包,它要求Javal.4(J2sE)、EcIipse3.2及Eclipse插件EclipseGEF3.2(eclipse图形化编辑框架)或更高版本。安装方法很简单,下载DToolsIDE压缩包后,将解压后的plugi船文件夹中的。唱.dmoIs.
ide-3.O.5.j盯文件复制到Eclip∞的pl蟛璐文件夹内即可。成功
安装后,启动Ecl噼就会在工具栏看到一个醒日的红色人头像
轮廓的图案。D瑚lsDE包括以下几个部分:向导、规则编辑器、规则验证器、DsL编辑器、4个视图:wbrkingM啪。哆Vi删、A驴
ndaⅥ州、GlobaIDa衄View和Au越“ew,前3个用在调试时检查
规则引擎本身的状态,Audjt啊ew用来显示审计日志。
1.2
Dmob规则语言
业务逻辑(即规则)要按照一定的语法格式写入规则库中,
万
方数据目前还没有对规则语言的标准化定义,国外有代表性的产品纷纷定义了自己的、lk务规则描述语言和业务规则表达形式。Drools有自己的规则语言,提供了相关语法和规则编辑器,同时提供了规则验证器用于自动检测编辑器中写入的规则是否有语法错误,并通过Problem视图报错。Drools规则库通常是一个以.drl为扩展名的文件,在一个.chl文件中,可以有多条规则,也可以将规则分布在多个.d订文件中,这有利于管理大量的规则。
Dmols的规则文件由以下几部分组成Ⅲ:
Pacl【age:必备项。一个Package声明一个命名空间(n咖e—
s口ace),标志一个特定的规则群。
Import:可选项。为将要在规则文件中使用的对象明确指定其完整的、正确的路径和类名。与package命名空间同名的JavaPacl【agc中的类不需要使用import,Drools会自动隐式导入。
Exp锄der:可选项。用来支持.dsl文件(即域描述语言)。Global:可选项。用来声明全局变鼍。通常Global变量被用来返同数据(such髂alogofactions),或提供规则中要使用的数据(da脚或服务(services)。
F岫c“on:可选项。提供一种在规则文件中插入Java语义代码的方法。
QIlery:可选项。QIlery只包括规则的LHS结构。Rule:必备项。一个规则文件中可以有若干条规则,每一条规则都遵循下面将要介绍的特定的规则格式。
上面各组成部分在规则文件中的顺序,除了package和expa|lder声明必须在文件顶端和在任何规则出现之前外,其它的在规则文件中可以任何顺序出现。
D啪ls规则文件中的每一条规则都遵循如下格式嗍:
mk”name”
A确butes
when
LHS
tll朗
RHS
end
Ruel、wh∞、thcn、印d是Drools的关键字,每一条规则以mle为起始标识,以∞d为结束标识,wh%提示规则的条件部分,th∞提示规则的动作部分,其中:
(1)Il锄e。规则名,每一条规则必须有自己的名字,同一文
件中不同的规则名字不能重复。
(2)Atmbutes是可选的,提示规则应该怎样运行。一条规
则可能有如下的属性:sali∞ce:i11teger型数据。agenda.J卵up:
string犁数据。auto.fbc璐:boole锄型数据。actiVati叩-g删Jp:s仃ing型数据。n0-100p:boole锄犁数据。
(3)LHs(1eftllandsidc)是规则的条件部分,遵守特定的
D啪ls规则语言语法。规则引擎就是将工作内存中的事实的
条件部分与规则文件中每条规则的LHS进行模式匹配,并激活满足条件的规则。
(4)RHs(啦hth柚dside)是规则的结果(con∞qII舶园或者动作
伍五∞)部分,RHS基本上是一个允许执行的J州a语义代码块。


