`
naiquan_hu
  • 浏览: 65881 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JBoss Rules 学习(三): Drools规则引擎 (上)

阅读更多

从今天开始,我们将分两期来详细的介绍Drools规则引擎的原理,和各关键类的使用方法。

Drools 规则引擎(上)


1. 概述 :
Drools 分为两个主要部分:构建( Authoring )和运行时( Runtime )。

构建的过程涉及到 .drl .xml 规则文件的创建,它们被读入一个解析器,使用 ANTLR 3 语法进行解析。解析器对语法进行正确性的检查,然后产生一种中间结构“ descr ”, descr AST 来描述规则。 AST 然后被传到 PackageBuilder ,由 PackagBuilder 来产生 Packaged 对象。 PackageBuilder 还承担着一些代码产生和编译的工作,这些对于产生 Package 对象都时必需的。 Package
对象是一个可以配置的,可序列化的,由一个或多个规则组成的对象。下图阐明了上述过程:

 
Figure 1.1
Authoring Components


RuleBase 是一个运行时组件,它包含了一个或多个 Package 对象。可以在任何时刻将一个 Package 对象加入或移出 RuleBase 对象。一个 RuleBase 对象可以在任意时刻实例化一个或多个 WorkingMemory 对象,在它的内部保持对这些 WorkingMemory 的弱引用。 WorkingMemory 由一系列子组件组成。当应用程序中的对象被 assert WorkingMemory ,可能会导致一个或多个 Activation 的产生,然后由 Agenda 负责安排这些 Activation 的执行。下图说明了上述过程:

 
Figure 1.2 . Runtime Components

2 .构建( Authoring ):

主要有三个类用来完成构建过程: DrlParser, XmlParser PackageBuilder 。两个解析器类从传入的 Reader 实例产生 descr AST 模型。 PackageBuilder 提供了简便的 API ,使你可以忽略那两个类的存在。这两个简单的方法是:“ addPackageFromDrl ”和“ addPackageFromXml ”,两个都只要传入一个 Reader 实例作为参数。下面的例子说明了如何从 classpath 中的 xml drl 文件创建一个 Package 对象。注意:所有传入同一个 PackageBuilder 实例的规则源,都必须是在相同的 package 命名空间( namespace )中。

<!-- <br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->PackageBuilder builder  =   new  PackageBuilder();
builder.addPackageFromDrl( 
new  InputStreamReader( getClass().getResourceAsStream(  " package1.drl "  ) ) );
builder.addPackageFromXml( 
new  InputStreamReader( getClass().getResourceAsStream(  " package2.drl "  ) ) );
Package pkg 
=  builder.getPackage();


Figure 2.1 PackageBuilder

PackageBuilder 是可以配置的,使用 PackageBuilderConfiguration 。通常,你可以指定另一个 parent ClassLoader 和用什么编译器( compiler ),默认是 Eclipse JDT 。下面显示了如何指定 JANINO 编译器:

<!-- <br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->PackageBuilderConfiguration conf  =   new  PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.JANINO );
PackageBuilder builder 
=   new  PackageBuilder( conf );

Figure 2.2 . PackageBuilderConfiguration

3
RuleBase:

Figure 3.1 . RuleBase

一个 RuleBase 包含了多个将被使用的规则包( packages of rules )。一个 RuleBase 是可以序列化的,所以它可以被配置到 JNDI 或其他类似的服务。通常,第一次使用时,一个 RuleBase 被创建并缓存。 RuleBase RuleBaseFactory 来实例化,默认返回一个 ReteOO RuleBase 。可以传入参数来指定采用 ReteOO Leaps 。然后,用 addPackage 方法加入 Package 实例。你可以加入有相同命名空间( namespace )的多个 Package

<!-- <br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->RuleBase ruleBase   =  RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);

Figure 3.2. RuleBaseFactory

一个 rulebase instance 是线程安全的,所有你可以在你的应用中,让一个 rulebase instance 在多个线程中共享。对于一个 rulebase 的最通常的操作是产生一个新的 WorkingMemory

这个 rulebase 保持着到它所产生的 WorkingMemoryd 的弱引用,所以在长时间运行的 WorkingMemory 中,如果 rules 发生改变,这些 WorkingMemory 可以即使的根据最新的 rules 进行更新,而不必重启 WorkingMemory 。你也可以指定 RuleBase 不必保持一个弱引用,但是你要保证 RuleBase 不用更新。

<!-- <br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> ruleBase.newWorkingMemory();   //  maintains a weak reference.
ruleBase.newWorkingMemory(  false  );  //  do not maintain a weak reference

任何时候, Package 可以被加入或移除;所有的改变都会被反映到现存的 WorkingMemory 中。不要忘了调用 fireAllRules() Activations 激发。

<!-- <br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> ruleBase.addPackage( pkg  );   //  Add a package instance
ruleBase.removePackage(  " org.com.sample "   );   //  remove a package, and all its parts, by it's namespace
ruleBase.removeRule(  " org.com.sample " " my rule "  );  //  remove a specific rule from a namespace

虽然有删除一个单独规则的方法,但是却没有加入一个单独规则的方法(要达到这个目的只有加入一个只有一条规则的 package )。

<!-- [if !supportEmptyParas]-->

RuleBaseConfigurator 可以指定 RuleBase 的附加行为。在加入 RuleBase 后, RuleBaseConfiguration 就变成不可变对象。

<!-- <br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> RuleBaseConfiguration conf  =   new  RuleBaseConfiguration();

conf.setProperty( RuleBaseConfiguration.PROPERTY_ASSERT_BEHAVIOR,
                  RuleBaseConfiguration.WM_BEHAVIOR_EQUALITY );

RuleBase ruleBase 
=   new  ReteooRuleBase( conf );

两个主要的属性是: PROPERT_ASSERT_BEHAVIOR PROPERTY_LOGICAL_OVERRIDE_BEHAVIOR (在以后的部分中会解释)。所有的属性值都是 RuleBaseConfiguration 类中的静态域常量。

分享到:
评论

相关推荐

    jboss rules 用户指南(中文)

    之前学习jboss rules 只能自己一点点的啃英文用户指南,后来终于找到了中文版的翻译版本,真是高兴,立即奉献给大家,让对规则引擎感兴趣的朋友也能一堵为快。 内容摘要:JBoss Rules 的前身是Codehaus的一个开源...

    myeclipse安装drools jboss rules规则引擎

    myeclipse安装drools jboss rules规则引擎

    JAVA规则引擎JBOSS RULES(DROOLS 6.5) 动态规则

    1.基于JBOSS RULES(DROOLS) 6.5 开发 2.JAR包精简后只有20个 10.9M 3.动态规则 项目中使用需自己修改为从数据库加载规则

    规则引擎drools-jboss rules

    规则引擎,drools,jboss rules

    Drools 规则引擎开发教程

    Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需...

    JBoss_Rules学习

    最近被纳入JBoss门下,更名为JBoss Rules,成为了JBoss应用服务器的规则引擎。 Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。

    jboss rule 规则引擎 中文版

    一本介绍jboss rule 规则引擎的好书哦 中文版的

    Drools JBoss Rules 5 Developers Guide

    高清晰版,很好的drools 5学习用书

    Drools JBoss Rules 5.X Developer's Guide

    Drools JBoss Rules 5.X 开发者指南 (英文版) Drools JBoss Rules 5.X Developer's Guide (E-Book) ☆ 出版信息:☆ [作者信息] Michal Bali [出版机构] Packt Publishing [出版日期] 2013年05月24日 [图书...

    Drools JBoss Rules 5.0 Developer's Guide

    Drools JBoss Rules 5.0 Developer's Guide Drools 5.0开发教程

    JBoss_Drools教程

    Drools是Redhat公司JBoss业务逻辑智能模块。www.jboss.org/drools/ Drools是处理规则的专家系统

    Drools Jboss Rules 5.0 Developer's Guide

    Drools Jboss Rules 5.0 Developer's Guide, This book guides you through various features of Drools, such as rules, ruleflows, decision tables, complex event processing, Drools Rete implementation with ...

    规则引擎Drools 中文使用教程

    Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需...

    Mastering JBoss Drools 6 for Developers

    规则引擎 drools cep 规则表述 Mastering JBoss Drools 6 was written to provide a comprehensive guide that helps you understand the main principles used by the Drools project to build smarter ...

    规则引擎Drools 中文使用指南

    Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需...

    jboss rules 最新09年英文原版教材

    09年7月,jboss 官方网站最新推荐的jboss rules教程

    Mastering JBoss Drools 6 for Developers_And_SourceCode.zip

    Mastering JBoss Drools 6 will provide you with the knowledge to develop applications involving complex scenarios. You will learn how to use KIE modules to create and execute Business Rules, and how ...

Global site tag (gtag.js) - Google Analytics