首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Drools-当我访问在KieSession中使用setGlobal设置的全局对象时,无法触发规则

Drools是一个基于规则引擎的开源项目,它提供了一个规则引擎和一个规则语言,用于实现业务规则的管理和执行。在Drools中,KieSession是一个核心概念,它代表了一个规则引擎的工作内存,用于加载和执行规则。

当在KieSession中使用setGlobal方法设置全局对象时,可以将一个对象作为全局变量在规则中使用。然而,有时候在访问这些全局对象时可能会遇到问题,无法触发规则。这可能是由于以下几个原因导致的:

  1. 对象未正确设置为全局变量:在使用setGlobal方法设置全局对象时,需要确保对象已经正确设置为全局变量。可以通过在规则文件中使用global关键字声明全局变量,并在规则中使用该变量。
  2. 规则条件不满足:规则引擎在执行规则时,会根据规则条件判断是否满足规则的触发条件。如果规则条件不满足,规则将不会被触发,因此也无法访问全局对象。需要确保规则条件满足,才能正确触发规则。
  3. 规则文件未正确加载:在使用Drools时,需要将规则文件加载到KieSession中才能执行规则。如果规则文件未正确加载,规则将无法被触发,也无法访问全局对象。需要确保规则文件已经正确加载到KieSession中。

为了解决这个问题,可以按照以下步骤进行排查和调试:

  1. 确认对象已正确设置为全局变量:检查代码中使用setGlobal方法设置全局对象的部分,确保对象已正确设置为全局变量。
  2. 检查规则条件:仔细检查规则文件中的规则条件,确保规则条件满足触发条件。
  3. 检查规则文件加载:确认规则文件已正确加载到KieSession中。可以通过打印日志或使用调试工具来确认规则文件是否被正确加载。

如果以上步骤都没有解决问题,可以考虑查阅Drools的官方文档或寻求相关技术支持,以获取更详细的帮助和解决方案。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Drools三】打工人学习Drools高级语法

,它可以让应用程序对象规则文件能够被访问。...语法结构为:global 对象类型 对象名称 使用global定义全局变量时有两点需要注意: 1、如果对象类型为包装类型一个规则改变了global值,那么只针对当前规则有效,对其他规则...可以理解为它是当前规则代码global副本,规则内部修改不会影响全局使用。 2、如果对象类型为集合类型或JavaBean一个规则改变了global值,对java代码和所有规则都有效。...kieSession = kieClasspathContainer.newKieSession(); //设置全局变量,名称和类型必须和规则文件定义全局变量名称对应 kieSession.setGlobal...为0 kieSession.setGlobal("gList",list); kieSession.fireAllRules(); kieSession.dispose(); //因为规则全局变量添加了两个元素

2.3K10

Drools(BRMS) 速成教程(上)

大家日常开发,肯定遇到过一些业务规则变来变去需求,比如:会员积分系统(今天要新注册会员送10积分,明天要改成注册送优惠券,后天搞活动要改成注册自动变成高级会员...)...3.2 import drl 规则文件,可以直接使用java定义好类,只需要import进来就好。...3.3 global 相当于全局变量声明,多个规则文件可共享该变量(后面会演示这一用法),要注意是:共享全局变量建议不要用Integer这种"简单"类型,这样无法规则文件修改变量"值",建议用复杂类型...kContainer.dispose(); } } } } 注意下共享变量,即:message4,message5部分,一般是规则触发前提前把共享变量先设置好初始值...//hello2.drl规则"global-demo" 我会每隔1秒触发,10次后停止!1 //规则:loop循环10次 我会每隔1秒触发,10次后停止!2 我会每隔1秒触发,10次后停止!

1K20

《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器

) 间隔定时器用int来定义,它遵循java.util.Timer对象使用方法。具有延迟和重复执行选择。其中第一个参数表示启动之后延迟多长时间执行,第二个参数表示每隔多久执行一次。...下面以一个模拟系统报警器来示例一下Timer使用规则timer每隔一秒执行一次,当满足触发规则返回结果至ResultEvent对象,业务系统拿到报警信息,并打印。...为了达到模拟效果,使用KieSessionfireUntilHalt方法和halt方法。示例代码如下。...很显然,定时器每隔一秒执行一次,当满足规则触发条件,将结果放入ResultEvent。 PS:完整demo下载请加QQ群,进入文件目录下载(包含其他更多场景demo)。...后语 你支持是我努力最大动力!社区建立离不开你支持。此系列课程正在持续更新,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。

1.2K90

这种场景你还写ifelse你跟孩子坐一桌去吧

,可以通过关注公众号获取:bugstack虫洞栈 ,回复关键字源码获取 以上是我们关于使用Drools规则引擎基本工程,规则引擎使用方式并不复杂,只要按照约定方式进行设置即可。...then处理结果,将结果信息返回,这个结果使用是我们设置一个global全局引入。最后结尾end关键字。 也许你会觉得这不是很像你if else吗。但千万不要这么觉得,因为这只是冰山一角。...(); } } init() 初始化 初始化方法,构建KieServices.Factory.get();,这个过程是比较耗费资源,实际业务使用也不会频繁构建。...从KieServices获取KieContainer,用于给定KieModule所有kiebase容器。 设置FACT对象,其实就是你决策对象一些条件值。...设置决策对象kieSession.insert(policy); 设置全局对象kieSession.setGlobal("res", result);,用于最终把结果输出 开始执行规则kieSession.fireAllRules

71610

这种场景你还写ifelse你跟孩子坐一桌去吧

,可以通过关注公众号获取:**bugstack虫洞栈**,回复关键字**** - 以上是我们关于使用```Drools```规则引擎基本工程,规则引擎使用方式并不复杂,只要按照约定方式进行设置即可...- then处理结果,将结果信息返回,这个结果使用是我们设置一个```global```全局引入。最后结尾end关键字。 - 也许你会觉得这不是很像你```if else```吗。...从```KieServices```获取```KieContainer```,用于给定KieModule所有kiebase容器。 3. 设置FACT对象,其实就是你决策对象一些条件值。...设置决策对象```kieSession.insert(policy);``` 3....设置全局对象``` kieSession.setGlobal("res", result);```,用于最终把结果输出 4.

89450

【Drools二】打工人学习Drools基础语法

后面将规则文件放入该文件夹。 1. 规则文件 1.1 构成 使用Drools非常重要一个工作就是编写规则文件,通常规则文件后缀为.drl。...对象某个属性是否一个或多个集合 not memberOf 判断一个Fact对象某个属性是否不在一个或多个集合 matches 判断一个Fact对象属性是否与提供标准Java正则表达式进行匹配...更新数据需要注意防止发生死循环。后面会讲到如何避免死循环即设置no-loop true 3.2 insert方法 insert方法作用是向工作内存插入数据,并让相关规则重新匹配。...(); 通过控制台输出可以发现,四个规则触发了,这是因为首先进行规则匹配只有第一个规则可以匹配成功,但是第一个规则向工作内存插入了一个数据导致重新进行规则匹配,此时第二个规则可以匹配成功。...注意:上面的代码需要设置日期格式,否则我们规则文件日期格式和默认日期格式不匹配程序会报错。

1.9K20

规则引擎Drools贷后催收业务应用

DRL 文件添加查询定义,然后应用程序代码获取匹配结果。查询搜索一组定义条件,不需要when或then规范。查询名称对于 KIE 库是全局,因此项目中所有其他规则查询必须是唯一。...global通过 KIE 会话配置 Drools 引擎工作内存设置全局值, DRL 文件规则上方声明全局变量,然后规则操作 ( then) 部分中使用它。...使用案例:List list = new ArrayList();KieSession kieSession = kiebase.newKieSession();kieSession.setGlobal...2.3.2 代码使用KieServices:可以访问所有 Kie 构建和运行时接口,通过它来获取各种对象(例如:KieContainer)来完成规则构建、管理和执行等操作。...催收系统虽然使用drools7.x版本,但是使用方式依然使用是5.x程序化构建器方法(Knowledge API)催收系统目前规则固定页面上只能编辑无法新增规则,只能通过初始化数据库表方式新增规则

1.2K20

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

global 全局变量 global用来定义全局变量,它可以让应用程序对象规则文件能够被访问。通常,可以用来为规则文件提供数据或服务。...全局变量并不会被插入到Working Memory,因此,除非作为常量值,否则不应该将全局变量用于规则约束判断。...对规则引擎fact修改,规则引擎根据算法会动态更新决策树,重新激活某些规则执行,而全局变量不会对规则引擎决策树有任何影响。约束条件错误使用全局变量会导致意想不到错误。...上面的实例完成了一个规则触发到通过global调用emailService方法实现。...目前国内第一套关于Drools(7)入门教程《Drools 7 规则引擎入门教程》正在火热录制,其他更多关于Drools系列教程也筹划,希望大家多多支持。

1.2K60

《Drools7.0.0.Final规则引擎教程》番外实例篇——默认条件陷阱

当我们向session插入多个对象,如果这多个对象匹配到同一条规则,fireAllRules方法返回命中规则数就是插入对象数目。但是有一个情况比较特殊,下面看看实例。...this is a multi-line comment in the right hand side of a rule */ end 如果你看到上面的代码,先别执行,猜测一下会打印日志触发规则条数是多少...因为Drools处理默认条件时候,也就是说when里面不写任何条件进行匹配,所有的对象对它来说都是没有区别的,没有可筛选区分,因此就当做一条规则来处理触发了。...当在规则when添加一个约束定义,比如: $obj:Object() 此时就会像正常情况下一样触发规则。因此,我们使用默认条件要特别留意此处,但大多数情况下我们都是会写条件约束。...目前国内第一套关于Drools(7)入门教程《Drools 7 规则引擎入门教程》正在火热录制,其他更多关于Drools系列教程也筹划,希望大家多多支持。

1.2K70

《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group多FACT对象

场景 当我使用activation-group,默认会执行优先级最高一个规则,然后其他规则不再执行,这也是此属性基本特性。...在其他属性使用时,我们知道,如果插入多个对象,那么如果每个对象都符合同一规则条件就会执行多次,如果部分条件符合规则,就执行部分次。...当我们即想使用activation-group特性,又想实现上面的要求改如何去做呢? 实例解析 实例一 首先,我们来确认第一个问题,insert多个FACT对象,会触发几次规则。...很显然,插入了两个FACT对象,只触发了一次规则。...实例二 那么,我们想达到上面说,如果插入多个对象,每个符合条件触发一次,同时一个activation-group组触发优先级比较高

1.2K80

《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group

agenda-group 规则调用与执行是通过StatelessKieSession或KieSession来实现,一般顺序是创建一个StatelessKieSession或KieSession,将各种经过编译规则添加到...session当中,然后将规则当中可能用到Global对象和Fact对象插入到Session当中,最后调用fireAllRules 方法来触发、执行规则。...没有调用fireAllRules方法之前,所有的规则及插入Fact对象都存放在一个Agenda表对象当中,这个Agenda表每一个规则及与其匹配相关业务数据叫做Activation,调用fireAllRules...方法后,这些Activation会依次执行,执行顺序没有设置相关控制顺序属性(比如salience属性),它执行顺序是随机。...引擎调用设置了agenda-group属性规则需要显示指定某个Agenda Group得到Focus(焦点),否则将不执行该Agenda Group当中规则

71870

《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析

3.2.4 KieServices 该接口提供了很多方法,可以通过这些方法访问KIE关于构建和运行相关对象,比如说可以获取KieContainer,利用KieContainer来访问KBase和KSession...3.2.6 KieBase KieBase就是一个知识仓库,包含了若干规则、流程、方法等,Drools主要就是规则和方法,KieBase本身并不包含运行时数据之类,如果需要执行规则KieBase...规则的话,就需要根据KieBase创建KieSession。...Memory时候,Drools引擎会检查该Fact是否已经存在,如果存在的话就使用已有的FactHandle,否则就创建新。...而判断Fact是否存在依据通过该属性定义方式来进行设置成 identity,就是判断对象是否存在,可以理解为用==判断,看是否是同一个对象; 如果该属性设置成 equality的话,就是通过Fact

1.8K70

Drools规则引擎-memberOf操作

场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf使用过程如果,memberOf之后参数不是集合也不是数组,而是格式如“1,2,3,4”字符串,那么Drools是否会讲其转换成数组...使用方法 官方文档和网络上资料给出解释基本上都是:用来判断某个 Fact对象某个字段是否一个集合(Collection/Array)当中) 。...当然这个过程并不会神奇转换成数组什么,仅仅类似于JavaString提供contains方法比较。 下面以具体代码来展示基于集合和字符串判断示例。...); kieSession.insert(member); kieSession.fireAllRules(); 规则代码,这里模拟了两种场景规则判断: package com.memberof...; end 执行结果: memberofRule规则触发! memberofRule2规则触发!

1.1K20

《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历

日历 日历可以单独应用于规则,也可以和timer结合使用规则使用。通过属性calendars来定义日历。如果是多个日历,则不同日历之间用逗号进行分割。...Drools,日历概念只是将日历属性所选择时间映射成布尔值,设置规则属性,控制规则触发。Drools可以通过计算当期日期和时间来决定是否允许规则触发。...false, false,false,false}); // weekDayCal.setDayExcluded(java.util.Calendar.THURSDAY, true); // 设置为...conf); return kSession; } 执行测试方法打印结果: In rule - calenderTest String matched Hello Bye 其中测试过程注意点已经代码中进行标注...,比如Calendar可以和timer共同使用;如何设置WeeklyCalendar哪一天执行,哪一天不执行。

739100

《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus

auto-focus agenda-group章节,我们知道想要让AgendaGroup下规则被执行,需要在代码显式设置group获得焦点。...而此属性可配合agenda-group使用,代替代码显式调用。默认值为false,即不会自动获取焦点。设置为true,则可自动获取焦点。...方法体如下: boolean accept(Match match); 该方法当中提供了一个Match参数,通过该参数可以获得当前正在执行规则对象和属性。...test agenda-group 被触发 这里,我们没有代码显式让test agenda-group获取焦点,但规则同样被执行了,说明属性配置已生效。...test-agenda-group 被触发 执行规则Filter传入规则名称为test-agenda-group,此规则被执行。

75790

规则引擎之drools入门

我们日常生活是由规则驱动。每次我们开车时候停在红灯处,之所以这样做,因为我们遵循一条规则,灯变红我们应该停下来。...如果你跳起来,最终会落到地面,这是由地球引力所决定,它可以被表示成简单数学方程。然而,对于我们生活日常规则,我们使用更加简单结构来表示:当 XXX 时候,做 XXX 事。...这意味着流程控制既不是由规则编写顺序决定,也不是数据输入顺序决定,而是由规则声明条件确定。 为什么需要使用规则简单地了解过规则以后,你可能仍然对为什么使用规则而感到困惑。...每次将数据添加到规则引擎,它将在与此类似的树中进行求值,并到达一个动作节点,该节点处,它们将被标记为准备执行特定规则数据。...当我们到达一个事实(Fact)与规则相匹配节点规则评估会将规则操作与触发数据添加到一个叫作议程(Agenda)组件,如果同一个事实(Fact)与多个规则相匹配,就认为这些规则是冲突,议程(Agenda

3.6K30
领券