Drools 是一个开源的规则引擎,目前有Jboss管理,最新版本为4.X。
我们使用Drools就是为了让它处理数据与规则的关系,因此Drools要获得数据和获得规则,然后进行执行。因此Drools分为编制和运行时两个部分。
编制是指产生rule的过程,Drools用DRL,或者XML来描述规则。
编制的过程包括为规则建立DRL 或XML 文件,传入一个由Antlr 3 文法器定义的解析器中。解析器对文件中规则文法的正确性进行检查并为descr 建立一个中间结构,在AST 中的descr 代表规则的描述。AST 然后将descr 传入Package Builder中,由其进行打包。Package Builder 同时负责包括打包中用到的所有代码产生器和编译器。Package 对象是自包含并可配置的,它是一个包含规则的序列化的对象。
RuleBase 是运行时组件,包含一个或多个Package。Package 在任何时候都可以向RuleBase中添加或删除。一个RuleBase 可以同时初始化多个Working Memory,在其间维护着一个弱引用,除非重新进行配置。Working Memory 包含许多子组件,如Working Memory Event Support(事件支持),Truth Maintenance System(真值维护系统), Agenda 和 Agenda Event Support(事件支持)。向Working Memory 中设置对象的工作可能要在建立了一个或多个激活的规则后才结束。Agenda 负有规划激活规则运行的责任。
以上是Drools的总体架构,其主要有以下类实现:
编制:
XmlParser,DrlParser 分别用来解析XML描述的规则文件和DRL描述的规则文件。
PackageBuilder 创建package实例。
例如:
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "package1.drl" ) ) );
builder.addPackageFromXml( new
InputStreamReader( getClass().getResourceAsStream( "package2.xml" ) ) );
Package pkg = builder.getPackage();
运行时的类:
RuleBase 使用RuleBaseFactory 实例化,默认情况下返回一个ReteOO 的RuleBase。Package通过使用addPackage 方法按顺序加入。你可以指定任何名称空间的Packages 或者同一名称的多个包加入RuleBase。
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
事实数据相关类:
WorkingMemory 保存运行时事实数据的地方。
由ruleBase产生:WorkingMemory wm= ruleBase.newStatefulSession();
加载事实数据:
wm.insert(object );
insert方法返回一个FactHandle对象指向workingMemory中对象的引用。如果要对Object进行修改删除等操作都要通过FactHander对象来完成。
在准备好Rule,和Fact后 就可以调用 WorkingMemory对象的 fireAllRules()方法执行规则引擎。
Agenda上面提到过它负有规划激活规则运行的责任。
它运行过程分两个阶段:
1) WorkingMemory Actions : assert 新的 facts ,修改存在的 facts 和 retract facts
都是 WorkingMemory Actions 。通过在应用程序中调用 fireAllRules() 方法,会使引擎
转换到 Agenda Evaluatioin 阶段。
2) Agenda Evaluation :尝试选择一条规则进行激发( fire )。如果规则没有找到就
退出,否则它就尝试激发这条规则,然后转换到 WorkingMemory Actions 阶段,直到 Agenda
中为空。
Drools提供了一些监听器来获得规则引擎执行过程中发生的一些事件:
WorkingMemoryEventListene,AgendEventListener和RuleFlowEventListener
从名称来看我们也大概能知道他们分别的作用:
WorkingMemoryEventListene是监听WorkingMemory中发生的一些时间,WorkingMemory发生的事件那就是Fact的插入,删除,修改。
对应的借口为:
objectInserted(ObjectInsertedEvent e);
objectRetracted(ObjectRetractedEvent e);
objectUpdated(ObjectUpdatedEvent e);
AgendEventListener是舰艇运行过程中Agenda管理调配规则发生的一些事件:
Action 在我理解应该是一个冲突就是上面提到过的 完全符合规则条件的,包含规则和数据的对象。
activationCancelled action被取消,可能是因为在规则的执行过程中,某个对象被修改或者某个对象被删除引起。
activationCreated 当有数据能匹配到规则,就能发生这个事件。
afterActivationFired 在规则执行后触发这个事件
agendaGroupPopped 规则组。。。
agendaGroupPushed
beforeActivationFired 在规则执行前触发这个事件
分享到:
相关推荐
对于学习 drools 的初学者,理解这些基础概念至关重要,它们将帮助你构建复杂的规则系统,实现业务逻辑的自动化和智能化。在实际应用中,根据需求灵活运用这些特性,可以极大地提升软件系统的可维护性和扩展性。
【Drools 知识点详解】 Drools 是一个基于Java的规则引擎,它允许开发者用自然语言编写业务规则,并在运行时高效地执行这些规则。Drools 提供了一个强大的框架,使得业务逻辑与应用程序的其他部分保持松耦合,从而...
#### 二、Drools 6环境搭建与第一个程序 在开始之前,我们需要构建一个基本的开发环境。本节将介绍如何搭建一个基于Maven的Drools项目,并编写第一个Drools程序。 ##### 2.1 Maven项目的创建 1. **创建Java ...
这些示例涵盖了各种Drools的使用场景,是学习和理解Drools功能的好资源。 Drools的主要特性包括规则的编写、推理引擎、工作流支持以及与各种数据源的集成。它的规则语言(DRL)允许开发者用类似英语的语法定义规则...
《drools5 读书笔记》 Drools是一款强大的规则引擎,它基于Java语言,用于在企业级应用中实现复杂的业务逻辑。这个读书笔记主要涵盖了Drools 5版本的相关内容,结合源码分析和工具使用,旨在帮助读者深入理解其工作...
**JBPM3学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在本文中,我们将深入探讨JBPM3的核心概念、功能和使用方法,以帮助...
在“Activiti学习笔记三:管理流程定义”中,我们将深入探讨如何使用Activiti来管理和操作流程定义。 首先,流程定义是Activiti中的核心概念,它是流程模型的静态表示,描述了工作流的结构和规则。流程定义通常以...
在jBPM-jPDL学习笔记中,你将了解到以下关键知识点: 1. **流程定义**:jPDL通过流程图中的节点(如开始节点、结束节点、任务节点、事件节点等)来描述流程的结构。这些节点之间的连线代表了流程的流转路径。 2. *...
- 博文链接:[JBPM学习笔记](https://zhaoshijie.iteye.com/blog/932534) 提供了关于JBPM的实践经验和案例分享,对于初学者来说是很好的参考资料。 通过深入学习和实践,可以更好地理解和掌握JBPM,从而在实际项目...
使用笔记** - 定期保存工作:在编辑本体过程中,应经常保存以防意外丢失。 - 学习插件:Protege有丰富的插件库,如Ontology Library插件可以帮助查找和导入公共本体。 - 熟悉快捷键:熟练使用快捷键可以提高工作...
**JBPM研究笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了全面的业务流程管理和工作流解决方案。这个系统的核心是基于模型驱动的架构,允许开发者通过图形化的方式设计、...
2. **规则集成**:Jbpm与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑。 3. **事件驱动**:支持事件触发的流程行为,比如基于时间或特定事件的流程跳转。 4. **持久化**:使用Hibernate进行数据持久化,保证...
当学习完一个知识点以后,自己做笔记,同时事后要总结,如果自己能把一个知识清晰表达出来的时候,自己也是有很大的收获和成长的; 赠人玫瑰手留余香。 目录 学习知识相关 Java 计算机基础(重要) 需要完善 需要...
在提供的压缩包中,“JBossjBPM.nh”可能是一个笔记或文档文件,详细介绍了在实际项目中使用JBoss jBPM的经验和技巧。通常,这种文件会涵盖以下内容: 1. 安装与配置:如何在本地环境中设置jBPM,包括依赖库的导入和...