Drools:规则流简介

 

规则流 <o:p></o:p>

作者: Kris Verlaenen <o:p></o:p>

<o:p> </o:p>

JBoss规则引擎中已经加入了一个新的特性,允许用户建立一个流程图来定义规则集进行评估的顺序。本文列举一些怎样使用规则流的例子。规则流将在Drools4.0版本中发布,对此特别期望的用户可以在最新的M2M3版本中看到它。JBoss规则引擎已经提供了一些功能来定义规则的执行顺序,例如salienceactivation groups等等。当处理海量的规则时,管理规则激发的顺序会变得很复杂。规则流允许你指定一个规则评估的流程。这允许你指定哪些规则应该按照先后顺序或并发的评估,指定规则评估的先决条件等等。这里有规则流的两个例子:<o:p></o:p>

<o:p> </o:p>

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><o:p></o:p>

1: 图中的规则流显示了一个两个规则组简单的先后顺序执行流程,确认在处理订单之前要先对订单进行检查。<o:p></o:p>

 
<o:p></o:p>

2: 更高级的规则流显示了并发、条件控制(例如处理订单的规则集只有在订单检查没有发现问题后才会执行)和循环的概念<o:p></o:p>


JBoss
规则引擎IDE已经扩展以支持建立这些规则流:<o:p></o:p>

* 有一个新的编辑器用来建立规则流文件(*.rf,如下图所示。当你保存rf文件时,一个关联的模型文件(*.rfm)文件也同时建立,它包含了规则流的定义信息。Rf文件包含了图形信息。<o:p></o:p>

* 有一个新的建立规则流文件的向导

 

规则流定义可以被加入到RuleBase,与规则加入的方式几乎一样<o:p></o:p>


//
建立Package包含所有规则
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader(
getClass().getResourceAsStream( "rules.drl" ) ) );
final Package pkg = builder.getPackage();

//
建立一个包含规则流的过程
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.addProcessFromFile(new InputStreamReader(
getClass().getResourceAsStream( "ruleflow.rfm" ) ) );

//
将包与过程加入RuleBase
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
ruleBase.addProcess( processBuilder.getProcesses()[0]);

//
RuleBase建立一个新的working memory
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();<o:p></o:p>


//
规则流可以通过startProcess开始执行<o:p></o:p>


//
在这里增加需要设置到working memory 中的元素, 然后开始
//
规则流开始执行最初的规则集
workingMemory.startProcess(1);<o:p></o:p>


使用规则流的更多细节会在不久被加入。<o:p></o:p>

<o:p> </o:p>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值