从今天开始,我们将分两期来详细的介绍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
类中的静态域常量。
Figure 3.3 RuleBaseConfiguration
分享到:
相关推荐
JAVA规则引擎JBOSS RULES,也被称为DROOLS,是一种强大的业务规则管理系统,它允许开发者用自然语言来编写业务规则,并在运行时执行这些规则。DROOLS 6.5是该规则引擎的一个版本,提供了许多改进和新特性,以提高...
之前学习jboss rules 只能自己一点点的啃英文用户指南,后来终于找到了中文版的翻译版本,真是高兴,立即奉献给大家,让对规则引擎感兴趣的朋友也能一堵为快。 内容摘要:JBoss Rules 的前身是Codehaus的一个开源...
myeclipse安装drools jboss rules规则引擎
综上所述,《Drools JBoss Rules 5 开发者指南》是一本内容丰富且极具实用价值的参考书,它不仅为初学者提供了入门指导,也为有经验的开发人员提供了深入的技术解析和实战经验分享。无论是想要深入了解 Drools 5 ...
2. **Drools规则引擎**:Drools(JBossRules)是一个易于访问企业策略、易于调整和管理的开源业务规则引擎。它符合业界标准,并以速度快、效率高著称。业务分析师或审核人员可以轻松查看和验证编码规则是否执行了所...
JBoss Rules(Drools)提供了这种规则引擎,它基于马尔科夫决策过程(Markov Decision Processes)理论,能够处理大量的规则并根据情况自动执行决策。 在资料中,你可能会看到关于以下核心概念的讲解: 1. **规则...
规则引擎 Drools-JBoss Rules 规则引擎是人工智能(Artificial Intelligence)领域中的一种技术,用于实现专家系统,专家系统使用知识表示把知识编码简化成一个可用于推理的知识库。规则引擎是一个基于规则的方法...
5. **融合JBOSS BRMS**:Drools是JBoss Business Automation的一部分,与BRMS(Business Rules Management System)和BPM(Business Process Management)平台相结合,可以构建完整的业务自动化解决方案。...
其中,Drools是最流行的开源规则引擎之一,而VisualRules和ILog则是知名的商业解决方案。 **1.2 Drools规则引擎** Drools是一款开源的业务规则管理系统(BRMS),它使用了Charles Forgy的RETE算法,这是一种高效的...
在Drools规则引擎的具体使用过程中,开发者需要学习如何创建规则文件,并理解如何在其中编写规则。Drools规则的编写依赖于它的查询语言,包括了对事实、规则和会话的操作。规则文件中可以定义多种元素,如变量、约束...
Drools JBoss Rules是JBoss企业中间件产品套件的一部分,它是一个基于Java平台的业务规则引擎(Business Rules Engine),它允许业务逻辑从业务应用程序中分离出来,并以一种易于管理和维护的方式呈现。Drools JBoss...
Drools,原名JBoss Rules,是一个强大的开源业务规则管理系统,由JBoss公司开发,基于Charles Forgy的RTE算法,专为Java设计。它允许业务分析师和审核人员以直观的方式查看和验证业务规则,以确保编码的规则准确地...
《Drools JBoss Rules 5.0 Developer's Guide》是一本专为希望利用Drools平台开发基于规则的业务逻辑的开发者而编写的指南。本书由Michal Bali撰写,于2009年7月首次出版,并由Packt Publishing发行。该书涵盖了...
【JBoss Rules 初学实例】是针对Drools规则引擎的一个入门教程,适用于初次接触该框架的开发者。Drools是一款开源的业务规则管理系统,它允许开发人员以声明式的方式编写业务规则,使得复杂的逻辑处理变得更加简洁...
### Drools5规则引擎开发文档知识点详解 #### 一、Drools5规则引擎简介 Drools是一款基于Java的开源规则引擎,广泛应用于业务逻辑处理领域,它可以帮助开发者快速地构建灵活且复杂的业务规则系统。Drools支持多种...
### Drools规则引擎应用分析 #### 一、引言 Drools规则引擎作为一款基于JSR94标准和Rete算法的开源框架,在软件设计过程...通过这些基础知识的学习,开发者可以更好地利用Drools规则引擎来优化软件系统的设计与实现。
JBoss jBPM 是一款业务流程管理工具,它在决策节点上使用规则引擎来控制工作流的流转。这种方式能够根据实时的数据来调整流程的方向,从而实现更灵活的业务自动化。 #### 四、Drools 的实现原理 ##### 4.1 Rete ...