JBossrule介绍概要
Drools规则引擎介绍
用户体验和技术开发部2012-6-10
Drools简介
JBoss Rules 的前身是Codehaus的一个开源项目叫Drools。最近被纳入JBoss门下,更名为JBoss Rules,成为了JBoss应用服务器的规则引擎。
Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。
既然JBoss Rules是一个商业规则引擎,那我们就要先知道到底什么是Rules,即规则。在JBoss Rules中,规则是如何被表示的
1
Rules
一条规则是对商业知识的编码。一条规则有 attributes ,一个 Left Hand Side ( LHS )和一个 Right Hand Side ( RHS )。
规则的 LHS 由一个或多个条件( Conditions )组成。当所有的条件( Conditions )都满足并为真时, RHS 将被执行。 RHS 被称为结果( Consequence )。
2
rule “ name ”
attribute value
when
LHS
then
RHS
End
Rule系统的高层次视图
3
对新的数据和被修改的数据进行规则的匹配称为模式匹配( Pattern Matching )。
进行匹配的引擎称为推理机( Inference Engine )。被访问的规则称为 ProductionMemory ,
被推理机进行匹配的数据称为 WorkingMemory 。 Agenda 管理被匹配规则的执行
Drools 的优势
声明式编程,使用规则文件可以很容易表达解决问题的方案。比代码更容易编写和阅读。
逻辑和数据分离,逻辑和数据解耦,使逻辑更容易维护,能够适应快速变化的需求变更。
速度和可扩展性
使用Rate算法,Jboss rule 的Rate00算法
规则集中化,所有的规则都集中在一起一起管理.方便管理,并可以例用快照的方式支持规则版本管理.
工具集成,工具(如Eclipse)提供编辑和管理规则的接口,并立即提供反馈,验证和内容的援助方式。还提供审计和调试工具。
理解规则,可以理解的规则,通过DSL可以自己编写接近自然语方的规则语言,方便普通用户编写规则。
4
什么时候使用规则引擎
问题的解决方案使用传统编码方式可能太复杂
问题可能不是太复杂,但是你不想使用一种脆弱的方式建立一个解决方案
问题没有明显的传统的算法解决方案。
逻辑经常变化
有现成的领域专家,但都是非技术性的。
5
Rate 算法简介
我们介绍了JBoss Rules中对Rule的表示,其中提到了JBoss Rule中主要采用的RETE算法来进行规则匹配。
RETE 算法可以分为两部分:规则编译( rule compilation )和运行时执行( runtime execution )。
下图是 Drools 中的 RETE 节点类型:
6
Rate算法示例
7
Drools API参考
Drools 分为两个主要部分:
编译( Building)和运行时( Runtime )。
构建的过程涉及到 .drl 或 .xml 规则文件的创建,它们被读入一个解析器,使用 ANTLR 3 语法进行解析。解析器对语法进行正确性的检查,然后产生一种中间结构“ descr ”, descr 用 AST 来描述规则。 AST 然后被传到 PackageBuilder ,由 PackagBuilder 来产生 Packaged 对象。 PackageBuilder 还承担着一些代码产生和编译的工作,这些对于产生 Package 对象都时必需的。 Package 对象是一个可以配置的,可序列化的,由一个或多个规则组成的对象。
8
Building(编译)
9
KnowledgeBuilder 负责通过
一些源文件,如一个DRL文件
或者一个Excel文件,把他们转
变成knowledge package或者process
definitions。供于knowledge
base 使用.
Deploying(布署)
10
一个knowledge package 是一个knowledge定义集合,他可能一个rules或者processes,通过knowledge builder 创建。Knowledge package 自成体系并且是可以序列化的。目前。他们形成了一个基本的部署单元。
Running(运行)
11
statefunknowledgeSession通过knowledge
原创力文档

文档评论(0)