zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《Drools7.0.0.Final规则引擎教程》第4章 global全局变量详解编程语言

规则引擎教程编程语言 详解 全局变量 global Final
2023-06-13 09:20:44 时间
global 全局变量

global用来定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。通常,可以用来为规则文件提供数据或服务。特别是用来操作规则执行结果的处理和从规则返回数据,比如执行结果的日志或值,或者与应用程序进行交互的规则的回调处理。

全局变量并不会被插入到Working Memory中,因此,除非作为常量值,否则不应该将全局变量用于规则约束的判断中。对规则引擎中的fact修改,规则引擎根据算法会动态更新决策树,重新激活某些规则的执行,而全局变量不会对规则引擎的决策树有任何影响。在约束条件中错误的使用全局变量会导致意想不到的错误。

如果多个包中声明具有相同标识符的全局变量,则必须是相同的类型,并且它们都将引用相同的全局值。

实例代码如下:

规则文件内容:

package com.rules 

import com.secbro.drools.model.Risk 

import com.secbro.drools.model.Message 

global com.secbro.drools.EmailService emailService 

 

rule  test-global  

 agenda-group  test-global-group  

 when 

then 

 Message message = new Message(); 

 message.setRule(drools.getRule().getName()); 

 message.setDesc( to send email!  

 emailService.sendEmail(message); end

测试代码:

@Test 

public void testGlobal(){ 

 KieSession kieSession = this.getKieSession( test-global-group  int count = kieSession.fireAllRules(); 

 kieSession.dispose(); 

 System.out.println( Fire   + count +   rule(s)!  

}

实体类:

public class Message { 

 private String rule; 

 private String desc; // getter/setter 

 }

操作类:

public class EmailService { 

 public static void sendEmail(Message message){ 

 System.out.println( Send message to email,the fired rule is   + message.getRule() 

 +  , and description is   + message.getDesc() +   

 } 

}

执行之后,打印结果:

Send message to email,the fired rule is  test-global , and description is  to send email!  

Fire 1 rule(s)!

上面的实例完成了一个规则从触发到通过global调用emailService方法的实现。

具体代码后续会更新到github上:https://github.com/secbr/drools

 

15190.html

cjavaxml