首页
学习
活动
专区
工具
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.6K10
  • drools规则动态化实践

    四、 drools动态化实践 从以上简单demo我们可以看出,规则依赖drl文件存在。而业务实际使用,需要动态对规则进行修改,无法直接使用drl文件。...最后介绍以下drools项目中实际使用方式 4.1 配置规则 我们业务场景可以理解为多个缓冲池构成一个网状结构。...); kieSession.setGlobal("result", result); // 执行规则 kieSession.execute(clueModel); 如果使用 KieSession则需要在使用完成后进行关闭...kieSession.insert(clueModel); kieSession.fireAllRules(); kieSession.dispose(); 执行规则过程可以加入各种监听器对过程各种变化进行监听...五、 总结 从上边流程我们体验了动态规则创建以及使用。动态规则满足了我们规则动态变化,规则统一管理诉求。 我也总结了在这种使用方式下drools几个优缺点。

    43710

    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次后停止!

    1.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.3K90

    这种场景你还写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

    74410

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

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

    93950

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

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

    2K20

    规则引擎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.5K21

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

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

    1.3K60

    《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当中规则

    79070

    《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.9K70

    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.2K20

    《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哪一天执行,哪一天不执行。

    777100

    《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,此规则被执行。

    79690
    领券