学习JBoss Rules有几天了,因为这方面的中文资料较少,所以这几天都在看官网上的manual。这是一份不错的教程,我把我看的一些重要的东西翻译整理了一下,希望可以对想学习JBoss Rules的朋友们提供一点帮助。
在开始这份教程之前,我先简要介绍一下JBoss Rules:
JBoss Rules 的前身是Codehaus的一个开源项目叫Drools。最近被纳入JBoss门下,更名为JBoss Rules,成为了JBoss应用服务器的规则引擎。Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。
既然JBoss Rules是一个商业规则引擎,那我们就要先知道到底什么是Rules,即规则。在JBoss Rules中,规则是如何被表示的
一条规则是对商业知识的编码。一条规则有 attributes,一个 Left Hand Side(LHS)和一个Right Hand Side( RHS )。Drools 允许下列几种attributes :salience,agenda-group,no-loop,auto-focus,duration,activation-group 。
- rule “ < name > ”
- < attribute > < value >
- when
- < LHS >
- then
- < RHS >
- end
规则的LHS由一个或多个条件(Conditions)组成。当所有的条件(Conditions)都满足并为真时,RHS将被执行。RHS被称为结果(Consequence)。LHS和RHS 类似于:
- if ( < LHS > ) {
- < RHS >
- }
规则可以通过package关键字同一个命名空间(namespace)相关联;其他的规则引擎可能称此为规则集(Rule Set)。一个package声明了imports,global变量,functions和rules 。
- package com.sample
- import java.util.List
- import com.sample.Cheese
- global List cheeses
- function void exampleFunction(Cheese cheese) {
- System.out.println( cheese );
- }
- rule “A Cheesy Rule”
- when
- cheese : Cheese( type == " stilton " )
- then
- exampleFunction( cheese );
- cheeses.add( cheese );
- end
对新的数据和被修改的数据进行规则的匹配称为模式匹配(Pattern Matching)。进行匹配的引擎称为推理机(Inference Engine)。被访问的规则称为ProductionMemory,被推理机进行匹配的数据称为WorkingMemory。Agenda管理被匹配规则的执行。推理机所采用的模式匹配算法有下列几种:Linear,RETE,Treat,Leaps。
【编辑推荐】