最近在研究Drools 5的文档,发现了一个retract()的使用问题。
我就用eclipse自带的例子说一下吧。
java code:
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
ksession.insert(message);
ksession.fireAllRules();
System.out.println("======"+message.getMessage());
rule code:
rule "Hello World"
salience 99
no-loop
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
retract( m );
end
rule "GoodBye"
no-loop
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end
执行结果:
Hello World
======Goodbye cruel world
Drools文档给的retract()说明是removes an object from working memory(从working memory中移除一个对象),那么既然我已经在memory中移除了m,为什么在java代码里可以打出“======Goodbye cruel world”呢?
我现在能理解的是java虚拟机为Message在堆中分配内存,这个内存和Drools运行时内存不同但又有联系,然后java代码把这个Message的引用插入到了Drools的内存,Drools在上面代码中修改了Message在堆中的属性值,而retract()只是移除掉了Drools运行时内存中的Message,这个解释正确与否我现在也不知道,大家以为怎么回事呢
分享到:
相关推荐
规则引擎的工作原理是,当新的事实(数据对象)被插入到工作内存中时,drools会自动匹配并执行符合条件的规则。 drools 提供了以下主要组件: - Guvnor:一个规则资产管理工具,用于创建、管理和版本控制业务规则。...
Drools是一款强大的业务规则管理系统(BRMS),它基于Java平台,主要用于实现复杂业务规则的管理和执行。Drools7.25是该系统的一个重要版本,提供了许多新特性和性能改进,使得开发者能够更高效地处理和执行业务规则...
3. 内存中的规则:除了生成.drl文件,drools还支持在内存中创建规则。这可以通过构建RuleDescr对象并使用KnowledgeBuilder.add()方法添加到规则库中。 四、工作记忆与事实 在drools中,规则的执行依赖于工作记忆...
Drools提供了一个灵活的框架,包括规则语言(DRL)、工作内存、事实对象和执行引擎等关键组件,使得业务规则的管理变得简单且高效。 在Drools中,规则语言DRL(Drools Rule Language)是编写规则的主要工具。DRL...
Drools是一款强大的规则引擎,由Red Hat公司开发并维护,它主要用于实现业务规则的管理和执行。Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度...
它基于Java平台,采用领域特定语言(DSL)来编写业务规则,使得业务人员也能参与到规则的管理和维护中,极大地提高了业务规则的灵活性和可维护性。本篇文章将围绕"droolsdroolsdrools"这一主题,通过深入剖析提供的...
Drools 7引入了更高效的工作内存管理,优化了执行性能,并提供了更丰富的API和改进的规则语法。 接下来,我们讨论如何在Spring Boot项目中集成Drools。首先,我们需要在`pom.xml`中添加Drools和Spring Boot的依赖。...
Drools Flow 是 Drools 项目的一部分,它提供了一套完整的业务流程管理(BPM)和工作流解决方案。Drools 是一个开源的规则引擎,主要用于决策管理和业务逻辑处理。它基于Java,遵循JBoss社区的开发,并被广泛应用于...
Drools7在性能上有了显著提升,引入了更快的规则匹配算法和内存管理优化,使得大规模规则集的处理更加高效。 6. **规则单元测试**: 提供了专门的规则测试框架,使得开发人员可以方便地对规则进行单元测试,确保...
10. **优化与性能**:Drools 提供了多种优化技术,如规则排序、并行执行、内存管理等,以提高规则引擎的性能。 11. **测试与调试**:Drools 提供了测试框架,允许开发者编写单元测试来验证规则的正确性,并提供调试...
在GOLF和EmployTest中,我们可能还会看到如何使用Drools的工作内存、规则流( Agenda )以及如何通过Java API或KIE工作台来部署和执行规则。 此外,Drools的规则库设计使得规则可以独立于应用程序代码,这增强了...
2. **事实插入顺序**:Drools 的规则引擎基于事件驱动模型,当新的事实(数据对象)被插入到工作内存时,引擎会检查是否有匹配的规则。如果多个规则都能匹配同一个事实,那么这些规则会按照它们被定义的顺序执行。 ...
- **定义**:Drools运行时的内存区域,用于存储Fact对象。 - **功能**:提供规则执行所需的上下文环境。 **4. KIE(Knowledge Is Everything)**: - **定义**:Drools的新一代API框架。 - **目的**:简化规则引擎...
3. **SpringBoot配置**:在`application.properties`或`application.yml`中,可能需要配置drools的相关参数,如规则文件路径、工作内存大小等。也可以创建一个`@Configuration`类,通过`@Bean`注解来创建和配置`...
6. **规则触发和执行**:Drools的执行流程包括添加事实到工作内存,然后通过`fireAllRules()`方法触发规则的执行。如果规则条件满足,就会执行相应的动作,如修改事实的属性(积分增加)或触发其他业务逻辑。 7. **...
Drools 提供了一个强大的规则语言(DRL - Drools Rule Language)来声明规则,并且集成了工作流引擎,使得业务流程管理成为可能。在 IT 领域,Drools 广泛应用于金融、保险、医疗等行业的决策自动化。 ** 在 IDEA ...
3. **第三章:工作内存和事实** - 本章讲解了Drools中的核心组件——工作内存,以及如何在其中存储和管理“事实”对象。工作内存是规则执行的舞台,而事实则是规则作用的对象。 4. **第四章:规则的触发与执行** - ...
- **内存管理**:调整工作内存大小,优化事件处理速度。 - **并行处理**:利用多核CPU进行并行事件处理。 9. **结论** Drools以其强大的规则处理能力和对复杂事件处理的支持,成为现代业务智能化的重要工具。...
- **工作内存**:Drools中的概念,存储所有运行时对象和规则的实例。 - **规则流**:用于描述规则执行顺序的流程图,可以通过Drools Workbench进行可视化配置。 - **决策表**:以表格形式定义规则,方便非技术人员...