此语法是用来定义全局变量的,被用于提供应用程序对象的规则,一般来说,global是用于提供数据或者服务使用的规则,特别是应用程序服务中使用规则的后果,并返回数据规则, 全局变量不插入到工作记忆,因此全球不应该用于建立条件规则除非它有一个恒定不变的价值。引擎不能通知全局变量的值改变时,不跟踪他们的变化。不正确的使用全局约束可能产生意外的结果虽然不会改变global变量的值或者内容,但是如果在同一个段代码中改变了global值,在这段code中,就用使用被修改后的global值,但其他code中的value是不会变的,我们可以理解成为global的一个副本。用法其实很简单:

Drl文件:global java.util.List myGlobalList;

rule "Using a global"

when

eval( true )

then

myGlobalList.add( "Hello World" );

end

java部分代码:List list = new ArrayList();

KieSession kieSession = kiebase.newKieSession();

kieSession.setGlobal( "myGlobalList", list );

类型是一致,变量名也要一致,因为setGlobal是一个map(看源码就知道了)。

注意, 它们只是命名对象的实例, 从你的应用程序传入到工作内存的。 这意味着你可以传递任何对象:你可以传入一个服务的定位器,或者服务自身。利用新的 from 元素,现在通常是传入一个 Hibernate会话作为全局变量,允许 from 从命名的 Hibernate 查询拉数据。

一个例子可以是一个 Email 服务实例。在你调用规则引擎的集成代码中,你获取你的 emailService 对象,然后在工作内存中设置它。在 DRL 中,你声明你有一个 EmailService 类型的全局对象,并且给它命名为 "email"。然后在你的规则推论中,你可以使用如 email.sendSMS(number, message)这样的东西。

全局变量不是设计来在规则之间共享数据的,决不能用于这样的目的。规则总是推断和作用于工作内在的状态,所以,如果你想从规则到规则传递数据,断言数据作为事实到工作内存中。

我们强烈反对从你的规则内部设置或改变全局变量的值。 我们建议你总是从你的应用程序中使用工作内存的接口设置该值

在使用全局变量Global时要注意,当我们传入的值是包装类型(注:不能传基本类型)或者是

javabean或者是集合时,我们是可以使用这些类型的内部属性及方法的。

举个简单的例子说明一下:global  com.jars1.jars1.Person perosn;

perosn.getName();

Person p=new Person();

p.setName("global");

ksession.setGlobal("perosn",p);

从上面的例子中,可以看出来,Person中的属性及方法是可以用的,包装类、集合及接口实现亦如此。这样一来,我们就可能在全局变量中进行一些java的操作了,比如操作数据库,webService,redis也是可以的,之前我们有讲过调用function调用静态方法,如此一来我们也可以通过全局变量来定义了

下面我们就要说一下这里面比较难理解的这一块,关于集合内容的类型说明,

对于集合中放的value,我们可以通过源码得知,SetGlobal其实是放的Object,所以在规则文件中,读取的也是Object,所以我们定义的值,或者是泛型都要通过强转才能将值取出。

在定义global时要注意,因为我们知道,global是不会放到工作内存中的,但是如果我们在定义时,有两个规则文件中的都用到了同一个全局变量,我们会发现,这两个global 的内容不会因为其他调用的改变而改变。

得出的结论就是,global 不是用来做数据共享的,session会影响到global的用法。

我们在使用全局变量时要特别注意一下:

1、常量值是不能改变的

2、包装类是不能改变的

3、类似javaBean这样的操作,是可以改变内容的,但内存地址不会变

java中的global类,Drools语法篇之Global全局变量详解相关推荐

  1. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  2. 什么是java中的枚举法_enum枚举javajava,enum枚举使用详解+,总结

    enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 语法(定义 ...

  3. java中final是修饰符么_Java final修饰符详解

    final 在 Java 中的意思是最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思.final 应用于类.方法和变量时意义是不同的,但本质是一样的,都表示不可改变. 使用 final 关 ...

  4. 【26天高效学习Java编程】Day22:Java中的属性集-缓冲流-转换流-序列化流详解

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...

  5. java中创建线程的四种方式及线程池详解

    众所周知,我们在创建线程时有四种方法可以用,分别是: 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和Future创建线程 4.使用线程池创建(使用ja ...

  6. java中printf,print,println,区别及用法详解

    此题是蓝桥杯的一道竞赛试题,在编写程序时,遇到了printf的用法,不是很熟悉,特此总结一下. 以下是对Java中print.printf.println的区别进行了详细的分析介绍,需要的朋友可以过来 ...

  7. java中elapseTime设置新时间,Jmeter系列(44)- 详解 Elapsed time、Latency、Connect Time的含义...

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 前言 在 Jmeter 中一些专业名词我们是需要提前认知的,如下 Elapsed time Latency Connect Time ===== ...

  8. java中document解析jsp,JSP基于dom解析xml实例详解

    本文实例讲述了JSP基于dom解析xml的方法.分享给大家供大家参考,具体如下: 初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩) ...

  9. java中定义score方法_elasticsearch 自定义 script score JavaAPI查询详解

    一:自定义score的应用场景 先打个比方,比如新产品上架了,我想让最新上架的产品搜索时候,排在前面,怎么办呢?很简单按时间排序.嗯这种方法很好实现. 但下面又有个需求,比如我要求排序中上架时间的比重 ...

最新文章

  1. bootstrap 时间日期日历控件(datetimepicker)附效果图
  2. CentOS6.3 下启动Oracle service和listener
  3. 相机上的AE AF AWB AEB都表示的是什么?
  4. Java设计模式详解
  5. 粤港澳大湾区菜篮子-哲商对话·林裕豪:从玉农业谋定大健康
  6. 九宫格拼图 支持44 55等
  7. python之numpy
  8. 将PHP文件生成静态文件源码
  9. Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
  10. python进制转换大全
  11. 如何在macOS Big Sur的Voice Memos中使用增强录音和智能文件夹?
  12. 运行 jar 文件_如何运行JAR文件
  13. 大二java课程设计题目_java课程设计题目.doc
  14. Java开发之HTTP协议详解
  15. ubuntu kylin 简单更新内置 firefox 记录(可使用安装包离线更新)
  16. docker之SonarQube集成阿里p3c规则
  17. mtk 手机低电无法关机,电池容量一直显示1%
  18. 服务器安装系统要如何载入驱动程序,Dell 服务器安装Windows 2008 R2时手动加载阵列卡驱动...
  19. vue 前端传图片文件,后端接收
  20. Rate Limiting速率限制

热门文章

  1. X线DR医学图像 --- DR医用滤线栅及摩尔纹详解 (二) 摩尔纹的产生机理
  2. 全局与成员函数做友元(学自王桂林)
  3. 软件授权加密算法研究
  4. CSS-CSS2选择器
  5. web期末网站设计大作业 奶茶店网站美食餐饮网站设计与实现(HTML+CSS+JavaScript)
  6. 关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(Cheshire Cat)的说明
  7. 2023最新计算机毕业设计题目选题大全
  8. cookie实现自动登陆原理
  9. 网易云信消息抄送php,网易云信消息抄送
  10. 计算三角形的周长和面积---C语言编程