`
naiquan_hu
  • 浏览: 66690 次
  • 性别: 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 类中的静态域常量。

分享到:
评论

相关推荐

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

    JAVA规则引擎JBOSS RULES,也被称为DROOLS,是一种强大的业务规则管理系统,它允许开发者用自然语言来编写业务规则,并在运行时执行这些规则。DROOLS 6.5是该规则引擎的一个版本,提供了许多改进和新特性,以提高...

    jboss rules 用户指南(中文)

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

    myeclipse安装drools jboss rules规则引擎

    myeclipse安装drools jboss rules规则引擎

    Drools JBoss Rules 5 Developers Guide

    综上所述,《Drools JBoss Rules 5 开发者指南》是一本内容丰富且极具实用价值的参考书,它不仅为初学者提供了入门指导,也为有经验的开发人员提供了深入的技术解析和实战经验分享。无论是想要深入了解 Drools 5 ...

    Drools开发教程、规则引擎.pdf

    在Drools规则引擎的具体使用过程中,开发者需要学习如何创建规则文件,并理解如何在其中编写规则。Drools规则的编写依赖于它的查询语言,包括了对事实、规则和会话的操作。规则文件中可以定义多种元素,如变量、约束...

    从Drools规则引擎到风控反洗钱系统v0.3.2.pdf

    2. **Drools规则引擎**:Drools(JBossRules)是一个易于访问企业策略、易于调整和管理的开源业务规则引擎。它符合业界标准,并以速度快、效率高著称。业务分析师或审核人员可以轻松查看和验证编码规则是否执行了所...

    JBoss Rules入门资料集锦

    JBoss Rules(Drools)提供了这种规则引擎,它基于马尔科夫决策过程(Markov Decision Processes)理论,能够处理大量的规则并根据情况自动执行决策。 在资料中,你可能会看到关于以下核心概念的讲解: 1. **规则...

    规则引擎drools-jboss rules

    规则引擎 Drools-JBoss Rules 规则引擎是人工智能(Artificial Intelligence)领域中的一种技术,用于实现专家系统,专家系统使用知识表示把知识编码简化成一个可用于推理的知识库。规则引擎是一个基于规则的方法...

    规则引擎Drools在J2EE项目开发中的应用

    5. **融合JBOSS BRMS**:Drools是JBoss Business Automation的一部分,与BRMS(Business Rules Management System)和BPM(Business Process Management)平台相结合,可以构建完整的业务自动化解决方案。...

    JBoss_Rules学习

    - **技术核心**:JBoss Rules(原 Drools)是基于 Charles Forgy 的 RETE 算法的一种规则引擎实现,专门为 Java 语言设计。通过将 RETE 算法与面向对象的接口相结合,使得商业规则能够以更加自然和直观的方式表达...

    从Drools规则引擎到风控反洗钱系统V0.2.3

    其中,Drools是最流行的开源规则引擎之一,而VisualRules和ILog则是知名的商业解决方案。 **1.2 Drools规则引擎** Drools是一款开源的业务规则管理系统(BRMS),它使用了Charles Forgy的RETE算法,这是一种高效的...

    Drools JBoss Rules 5.X Developer's Guide

    Drools JBoss Rules是JBoss企业中间件产品套件的一部分,它是一个基于Java平台的业务规则引擎(Business Rules Engine),它允许业务逻辑从业务应用程序中分离出来,并以一种易于管理和维护的方式呈现。Drools JBoss...

    Drools5规则引擎学习研究

    Drools,原名JBoss Rules,是一个强大的开源业务规则管理系统,由JBoss公司开发,基于Charles Forgy的RTE算法,专为Java设计。它允许业务分析师和审核人员以直观的方式查看和验证业务规则,以确保编码的规则准确地...

    Drools JBoss Rules 5.0 Developer's Guide

    《Drools JBoss Rules 5.0 Developer's Guide》是一本专为希望利用Drools平台开发基于规则的业务逻辑的开发者而编写的指南。本书由Michal Bali撰写,于2009年7月首次出版,并由Packt Publishing发行。该书涵盖了...

    JBoss Rules 初学实例

    【JBoss Rules 初学实例】是针对Drools规则引擎的一个入门教程,适用于初次接触该框架的开发者。Drools是一款开源的业务规则管理系统,它允许开发人员以声明式的方式编写业务规则,使得复杂的逻辑处理变得更加简洁...

    Drools5规则引擎开发文档

    ### Drools5规则引擎开发文档知识点详解 #### 一、Drools5规则引擎简介 Drools是一款基于Java的开源规则引擎,广泛应用于业务逻辑处理领域,它可以帮助开发者快速地构建灵活且复杂的业务规则系统。Drools支持多种...

    Drools规则引擎应用分析

    ### Drools规则引擎应用分析 #### 一、引言 Drools规则引擎作为一款基于JSR94标准和Rete算法的开源框架,在软件设计过程...通过这些基础知识的学习,开发者可以更好地利用Drools规则引擎来优化软件系统的设计与实现。

    jboss rules 用户指南

    JBoss jBPM 是一款业务流程管理工具,它在决策节点上使用规则引擎来控制工作流的流转。这种方式能够根据实时的数据来调整流程的方向,从而实现更灵活的业务自动化。 #### 四、Drools 的实现原理 ##### 4.1 Rete ...

Global site tag (gtag.js) - Google Analytics