drools管理规则(开启灵活开发编码模式)

继续drools的学习,本节主要说说高级语法中常用的全局变量global。

高级语法global全局变量
  • ① 介绍

global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。可以用来为规则文件提供数据或服务。

  • ② 语法结构

global 对象类型 对象名称

  • ③ 注意点
  1. 如果对象类型为包装类型是【java.until.* 这些都属于包装类】,在一个规则中改变了global的值,那么只针对当前规则有效,对其他规则中的global不会有影响。可以理解为它是当前规则代码中的global副本,规则内部修改不会影响全局的使用。
  2. 如果对象类型为集合类型或javabean时,在一个规则中改变了global的值,对java代码和所有规则都有效。
  • ④ 创建一个drl文件演示,验证包装类的全局变量

定义2个规则,方便看出效果,修改全局的变量,看看下个规则值是不是改变了。count的初始值由java来进行创建。写这个例子就是为了判断在第一个规则里面改变了count的值,在第二个规则里面看count是不是发生了改变。

drools管理规则(开启灵活开发编码模式)(1)

第一个规则执行后count是15,第二个规则执行后count是5,

drools管理规则(开启灵活开发编码模式)(2)

第三个定义一个集合的drl,并设置初始值,第四个规则集合里面的数量是否有变化

drools管理规则(开启灵活开发编码模式)(3)

单元测试的结果,已经添加完毕了,在第四个规则里面还存在数量的变化。一旦对这个变量发生改变,任何其他地方都会受到影响。

drools管理规则(开启灵活开发编码模式)(4)

drools管理规则(开启灵活开发编码模式)(5)

定义个javabean的方式。看是否发生改变。

drools管理规则(开启灵活开发编码模式)(6)

drools管理规则(开启灵活开发编码模式)(7)

  • ⑤ 指定drl中的那个规则执行

目前drl太多了,控制台打印的东西太乱了,不好控制。

// 指定某种规则开头的规则名称

kieSession.fireAllRules(new RuleNameStartsWithAgendaFilter("rule_global"));

drools管理规则(开启灵活开发编码模式)(8)

PS:排除干扰只执行需要看结果的字段。今天全部变量的使用讲解完了,下次咱们说说查询Query。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页