首页 > 其他分享 >drools_04_global

drools_04_global

时间:2022-10-20 07:22:11浏览次数:68  
标签:drools 04 global System totalCount 规则 println out

关于 global 属性

  • drl 文件中可以设置任意多个 global 对象, 语法是 global dataType variable , dataType 不能 是int/double等原始类型.
  • global 作用: 用于Java和规则之间传递数据, 或者规则之间传递数据, 比如我们在 java 端将 outOfStockerProducts 传递到规则.
  • global 对象可以通过 KieSession API 设置, 也可以在规则中设置, 就像是规则的普通变量一样.
  • global 对象最好是通过KieSession API 设置设置, 这样能确保在pattern match之前就已ready.
  • 在规则中修改 global 对象, 将影响后续规则和Java 对象, 下面是测试结果:
    • 集合类型: 新值对Java代码和所有规则都生效.
    • POJO: 新值对Java代码和所有规则都生效.
    • Integer/Double等包装类型: : 新值对Java代码和所有规则都生效.
    • int/double 类型: 不能用于 global 对象的定义.

包装类型的global对象影响范围测试代码

Drools drl 文件:

package com.sample.rules
 
import com.sample.Order;

global Double $totalCount ;
 
rule "rule1"   
   salience 2
   when
       $order:Order()
   then
      System.out.println("==============");
      System.out.println("rule1 fired");
      System.out.println("old $totalCount:" +$totalCount);
      $totalCount=10D ;
      System.out.println("$totalCount:" +$totalCount);
end     


rule "rule2"   
   salience 0
   when
       $order:Order()
   then
      System.out.println("==============");
      System.out.println("rule2 fired");
      System.out.println("$totalCount:" +$totalCount);
end     

测试Java类 代码:

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

/**
 * This is a sample class to launch a rule.
 */
public class DroolsTest {

	public static final void main(String[] args) {
		try {
			// load up the knowledge base
			KieServices ks = KieServices.Factory.get();
			KieContainer kContainer = ks.getKieClasspathContainer();
			KieSession kSession = kContainer.newKieSession("ksession-rules");

			Double globalValue = Double.valueOf(2.1);
			kSession.setGlobal("$totalCount", globalValue);
			System.out.println("old java code $totalCount:" + globalValue);

			Order order = new Order();
			kSession.insert(order);

			kSession.fireAllRules();

			globalValue = (Double) kSession.getGlobal("$totalCount");
			System.out.println("==============");
			System.out.println("java code $totalCount:" + globalValue);

			kSession.dispose();

			// System.out.println(order.getRealPrice());
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}
}

测试运行效果:

参考

标签:drools,04,global,System,totalCount,规则,println,out
From: https://www.cnblogs.com/harrychinese/p/drools_04_global.html

相关文章

  • 图片浏览器上可以直接访问,但是在img上报404
    解决方案(之一)在页面中加入<metaname="referrer"content="no-referrer"/>原因HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告......
  • Ubuntu18.04系统py2与py3切换方法
    python2切换成python3sudoupdate-alternatives--install/usr/bin/pythonpython/usr/bin/python2100sudoupdate-alternatives--install/usr/bin/pythonpython/u......
  • 04 设备树的处理流程
    1.内核对设备树的处理每个节点都会转化为一个device_node部分device_node会转化为platform_deviceof_platform.h文件中会把device_node转化为platform_device,实际使......
  • 004.Dockerfile运行jar文件
    文件名为:po-1.0-SNAPSHOT.jar创建目录:/data/docker/springboot_demo目录下新建文件Dockerfile文件内容为:FROMopenjdk:11-jre-slimRUNapt-getupdateRUNapt-g......
  • 4-04-注册中心原理剖析与设计实践(上)_ev
    目录        第一种更好        以集群维度通过key-vlist    没太懂_超时处理          cap定义:在1.......
  • ubuntu20.04内核升级,增加kvm模块
    ubuntu20.04内核升级,增加kvm模块原创 南哥小白 南小白攻防 2022-03-3115:43    本操作主要是升级内核,体验一下源码编译内核的操作步骤。准备虚拟机以及......
  • Dubbo 04: zookeeper注册中心
    借助zookeeper注册中心进一步改正直连式+接口工程的不足,更好的管理服务者提供的功能以及消费者对服务的申请访问需要用到3个相互独立的maven工程,工程1为maven的jav......
  • 04-变量生命
    变量声明普通声明//普通声明 varnum1int num1=2 fmt.Println(num1)类型推断 varnum2=4 fmt.Println(num2)简短声明 num3:=8 fmt.Prin......
  • 04.大型数据库应用技术课堂测试05-日志数据分析-错误总结
    错误总结:1.ExpressionnotinGROUPBYkey'id'解决:在groupby子句中,select查询的列,要么需要是groupby中的列,要么得是用聚合函数(比如sum、count等)加工过的列。不......
  • 20221304获奖感言和学习心得
    20221304获奖感言和学习心得获奖感言非常荣幸得到了娄老师的认可,获得了这份丰厚的奖品。在进入大学之前,我没有学过编程。一开学的时候确实有点不适应这样快的教学节奏,但......