Drools
文章平均质量分 72
程序新视界
个人公众号【程序新视界】,一个硬技术,软实力同步提升的平台。《Spring Boo技术内幕:架构设计与实现原理》作者,《深入以太坊智能合约开发》联合作者之一。主要从事于三方支付行业。
展开
-
AI火爆,传统的规则引擎是否无用武之地?
随着ChatGPT的问世,AI的火爆程度再一次被点燃,但看目前市场上对于GPT的应用依旧处于探索阶段,除了基座大模型之外,并没有真正意义上的AI原生成功产品。也就是说,目前大多数产品都还处于探索阶段。ChatGPT如此火爆,那么,我们现有的产品,特别是充斥着大量规则的逻辑与变数的产品,是否适合通过大模型来进行改造和演进呢?基于这个话题,这篇文章我们就来聊聊“基于传统规则引擎”和“基于AI”实现规则化产品的不同视角与实现。原创 2024-09-21 09:04:07 · 393 阅读 · 0 评论 -
Drools规则引擎之决策表从入门到精通
决策表是Drools规则引擎的重要应用场景之一。但学习决策表需要了解Drools基础语法知识,才能进一步进行学习。本文,为大家提供学习决策表相关的思路:第一章 Drools决策表介绍学习基础简介决策表简介决策表使用场景及特性第二章 入门&原理&操作讲解决策表生成DRL文件的两种方式决策表的入门示例决策表加载原理分析决策表的校验定义kmodule第三章...原创 2020-03-20 15:57:40 · 3719 阅读 · 0 评论 -
Drools规则引擎视频教程
经过多半个月的加班加点,终于又完成了一套Drools规则引擎的视频教程。新增了Workbench和KIE Server的内容,而且后续还会持续更新。相关视频教程内容,可在CSDN学院获得:https://edu.csdn.net/combo/detail/1575至此,关于Drools规则引擎的视频教程核心内容已经差不多完成。后续还会围绕实战进行更多内容的扩充。...原创 2020-02-16 17:50:15 · 1937 阅读 · 0 评论 -
Drools集成CDI(一)
Drools对CDI进行了很好的集成,本节课带大家先了解一下CDI的基本使用,在下一节课中再讲解如何在Drools中应用CDI。CDI简介CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现。@Inject是JSR330规范实现的,与spring中的@Autowired基本一样,但没有request属性。可参看文...原创 2019-01-04 09:55:20 · 1398 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》番外篇之ruleflow-group合并
前奏本篇文章在与补充不同版本中ruleflow-group的使用说明,网上关于此属性的使用说明非常少。不同版本合并从Drools 6.5版本的说明文档到Drools 7版本的说明文档中都提到ruleflow-group和agenda-group进行合并(更早版本是否有类型情况,请阅读官方文档查证)。get方法已经被废弃,但依旧保留在代码中,但都返回相同的底层数据结构。当jBPM激活一个组时,它现在只原创 2017-10-28 18:57:04 · 4591 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》番外实例篇——FactHandler使用案例
背景我们在使用以太坊相关的json-rpc借口发送交易时,往往会出现这种现象:交易已经发送出去,也获得了交易的hash值。dev模式的geth也在正常挖矿,可是问题是交易却迟迟未被确认。会发生此种类型的接口如:eth_sendTransactioneth_sendRawTransaction那么是什么原因导致此问题呢?今天就带大家了解一些导致此问题的原因。问题追踪除了上面的表象问题,我们还可以进步原创 2017-09-17 21:57:43 · 3772 阅读 · 3 评论 -
《Drools7.0.0.Final规则引擎教程》第5章 session使用说明
KieSession是用来与规则引擎进行交互的会话。在Drools 7当中分有状态的session和无状态的session:KieSession和StatelessKieSession。有状态session通过KieContainer可以获取KieSession,在kmodule.xml配置文件中如果不指定ksession的type默认也是有状态的session。有状态session的特性是,我们可原创 2017-09-24 10:56:42 · 5246 阅读 · 4 评论 -
《Drools7.0.0.Final规则引擎教程》番外实例篇——Map使用案例
背景技术交流群中,不少朋友在问,如何在Drools规则文件中使用Map。今天就用实例带大家了解一下map的使用方法。实例代码测试部分代码:@Test public void testMapUsage() { KieSession kieSession = this.getKieSession("map-group"); Map<String, Person> m原创 2017-09-04 22:37:08 · 9052 阅读 · 1 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 Function函数
Function函数首先来看一下function函数的语法结构图: 函数是将语义代码放置在规则文件中的一种方式,就相当于java类中的方法一样。函数并不会比辅助类做更多的事情,实际上,编译器会在幕后生成助手类。使用函数的好处是可以将业务逻辑集中放置在一个地方,根据需要可以对函数进行修改。但它既有好处也有坏处。函数对于调用规则的后果部分操作是最有用处的,特别是只有参数变化但执行的操作完全相同时。这里原创 2017-08-22 16:43:56 · 6252 阅读 · 2 评论 -
《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象
场景当我们使用activation-group时,默认会执行优先级最高的一个规则,然后其他规则不再执行,这也是此属性的基本特性。那么,大家是否考虑过这样一个问题,那就是如果在调用fireAllRules方法之前,insert了多个对象,那么应该触发几次规则?在其他属性的使用时,我们知道,如果插入多个对象,那么如果每个对象都符合同一规则条件就会执行多次,如果部分条件符合规则,就执行部分次。当我们即想使原创 2017-08-15 08:05:16 · 5194 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》番外实例篇——默认条件的陷阱
场景今天向大家介绍一个典型的具有陷阱的场景,虽然不常用,但是如果错误使用的话也会导致莫名其妙的问题。当我们向session中插入多个对象,如果这多个对象匹配到同一条规则时,fireAllRules方法返回命中的规则数就是插入对象的数目。但是有一个情况比较特殊,下面看看实例。实例下面是测试代码和规则内容:@Test public void testComment(){ KieS原创 2017-08-14 18:53:26 · 2760 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
关键字从Drools 5开始引入了硬关键字和软关键字。硬关键字是保留关键字,在命名demo对象,属性,方法,函数和规则文本中使用的其他元素时,不能使用任何硬关键字。以下是必须避免的硬关键字: (1)true (2)false (3)null 软关键词只在它们的上下文中被识别,可以在其他地方使用这些词,尽管如此,仍然建议避免它们,以避免混淆。其中大多数关键字我们在前面的章节中已经介绍过。软关键原创 2017-08-06 10:41:57 · 2551 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历
日历日历可以单独应用于规则中,也可以和timer结合使用在规则中使用。通过属性calendars来定义日历。如果是多个日历,则不同日历之间用逗号进行分割。在Drools中,日历的概念只是将日历属性所选择的时间映射成布尔值,设置为规则的属性,控制规则的触发。Drools可以通过计算当期日期和时间来决定是否允许规则的触发。 此示例首先需要引入quarts框架:<dependency> <gro原创 2017-07-27 21:03:35 · 2757 阅读 · 2 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 注释&错误信息
注释像Java开发语言一样,Drools文件中也可以添加注释。注释部分Drools引擎是会将其忽略调的。单行注释使用“//”,示例如下:rule "Testing Comments"when // this is a single line comment eval( true ) // this is a comment in the same line of a pattern原创 2017-08-06 07:32:11 · 5028 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础
Query查询首先,我们先来看一下query的语法结构图: Query语法提供了一种查询working memory中符合约束条件的FACT对象的简单方法。它仅包含规则文件中的LHS部分,不用指定“when”和“then”部分。Query有一个可选参数集合,每一个参数都有可选的类型。如果没有指定类型,则默认为Object类型。引擎会尝试强转为需要的类型。对于KieBase来说,query的名字原创 2017-08-20 11:36:37 · 4298 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
结果条件在Java中,如果有重复的代码我们会考虑进行重构,抽取公共方法或继承父类,以减少相同的代码在多处出现,达到代码的最优管理和不必要的麻烦。Drools同样提供了类似的功能。下面我们以实例来逐步说明。 像下面最原始的两条规则,有相同的业务判断,也有不同的地方:package com.rules.conditionalimport com.secbro.drools.model.Custome原创 2017-08-04 21:29:13 · 4330 阅读 · 2 评论 -
《Drools 规则引擎视频教程》相关事宜
非常感谢大家能够有时间来看这篇博客,本篇博客主要介绍一下最近本人正在致力于的Drools 7 规则引擎文档和视频教程相关事项。Drools 本身在国内的技术网站上的资料就比较少,最近的视频教程更是几乎没有。本人最近一段时间正在致力于文档编写(已经完成过半)和视频的录制。同时,博客的编写发表也在同步进行。后期会根据项目中的时间录制实战教程。欢迎大家多多支持。文档、博客、Github代码完全免费开放,视原创 2017-08-12 10:38:45 · 13591 阅读 · 15 评论 -
《Drools 7 规则引擎教程》番外篇-规则条件匹配机制
问题场景QQ技术群(593177274)中有同学遇到这一个问题场景:在多条规则(比如3条)的when中使用了一个相同的静态方法,并在静态方法中打印相关的日志信息。同时,使用了AgendaFilter对规则进行了过滤。也就是说只包含部分规则(比如匹配一条规则的名字)的使用。在这种场景下,匹配到的那条规则会正常触发,这个毫无疑问,但执行规则引擎之后会有一个附加情况,那就是使用同一静态方法的三条规则都调用原创 2017-11-03 17:14:37 · 7654 阅读 · 0 评论 -
Drools规则引擎Business Central Workbench版本变更
Drools规则引擎的Business Central Workbench是Web应用程序和用于管理Drools和jBPM资源的存储库,。在之前版本中名称为Workbench,对应的部署包为kie-drools-wb-7.*.0.Final-*.war,但最近两年该项目的war包版本和支持的web容器产生了多次重大的变更。下面带大家了解一下相关的变更信息。在7.12版本中,不支持tomcat...原创 2019-10-02 19:11:24 · 2828 阅读 · 0 评论 -
Drools规则引擎-如果Fact对象参数为null如何处理
问题场景在技术交流群(QQ:715840230)中有同学提出这样的问题:往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值。但是如果在外面做输入检查,规则一改,fact所需要的字段不一样了,输入检查也要跟着改,耦合比较强。有没有比较好的方法呢?问题解答其实针对这种问题与规则引擎的关系不大,比较重要的还是要看业务逻辑。比如对一个企业进行信用评级...原创 2019-07-28 20:10:26 · 2633 阅读 · 1 评论 -
Drools规则引擎-如果判断某个对象中的集合是否包含指定的值
规则引擎集合相关处理在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值。而Drools规则引擎也提供了多种处理方式,比如通过from、contains、exists等进行操作,比较。当然也可以通过function函数来做相应的比较,在个在其他章节讲到过,就不在此赘述。下面重点以几个实例才进行讲解,在具体实践中根据具体情况来进行运用。...原创 2019-07-31 21:06:50 · 2995 阅读 · 3 评论 -
Drools规则引擎-memberOf操作
场景规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如“1,2,3,4”的字符串,那么Drools是否会讲其转换成数组?其实很显然,Drools规则引擎不会这么做,它也并不知道你定义的字符串的格式及分隔符是什么,不会像SpringMVC那样约定好以json格式进行解析。今天这批文章就带大家了解一...原创 2019-07-15 21:29:48 · 3010 阅读 · 0 评论 -
Drools规则引擎-判断集合(List)是否包含集合
问题场景在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容。拿一个具体的例子来说明,我的公众号《程序新视界》接受商务合作有一定的要求,设置了对应行业的黑名单,比如:房地产、游戏和P2P领域的合作不接。那么此时,有一个广告商准备投放广告,而它投放的广告领域涵盖了教育和P2P,那么,在...原创 2019-07-14 15:41:58 · 6117 阅读 · 0 评论 -
美团酒旅实时数据规则引擎应用实践
背景美团点评酒旅运营需求在离线场景下,已经得到了较为系统化的支持,通过对离线数据收集、挖掘,可对目标用户进行T+1触达,通过向目标用户发送Push等多种方式,在一定程度上提高转化率。但T+1本身的延迟性会导致用户在产生特定行为时不能被实时触达,无法充分发挥数据的价值,取得更优的运营效果。在此背景下,运营业务需要着手挖掘用户行为实时数据,如实时浏览、下单、退款、搜索等,对满足运营需求用户进行实时...转载 2019-01-21 08:46:20 · 2394 阅读 · 4 评论 -
Drools规则模板使用之Excel
规则模板简介规则模板是使用模板文件和表格数据源即时生成DRL规则的方法。表格数据源是指可以用表格中展示的数据,典型的介绍是数据库和Excel。如果根据存储在应用程序之外的数据来生成规则?解决方案之一就是:规则模板规则模板的优势规则的数据和结构完全分离相同的模板可用于不同的数据集同一数据集可用于不同的模板与决策表相比,提供了极大的灵活性。规模模板的语法结构template...原创 2019-01-25 14:39:59 · 5340 阅读 · 1 评论 -
Drools使用dsl语言
Drools 为了对非开发人员更加友好,提供了dsl语言的支持,通过dsl再转换成drl文件来进行执行。DSL简介DSL == Domain Specific Language以贴近业务领域的方式,即以类自然语言的方式来构造软件,使得我们不用花费太多精力就能看懂代码所对应的业务含义 。它是创建规则语言的一种方式,致力于解决我们的问题域 。DSL相当于一个转换器,它能将某一领域内的术语...原创 2019-01-24 18:26:39 · 3390 阅读 · 0 评论 -
Drools 6.4.0Final版本KieScanner内存泄漏Bug
如果你在使用Drools 6.4.0.Final版本之Drools7.0.0Beta1(不包括此版本)的drools或workbench,需要注意内存溢出问题。关于内存溢出的bug修复问题,请参考官方的issues:https://issues.jboss.org/browse/DROOLS-1199原文链接:http://www.choupangxia.com/topic/detail/9...原创 2019-01-18 08:23:15 · 894 阅读 · 0 评论 -
Drools集成CDI(二)
上节课《Drools集成CDI(一)》中我们介绍了CDI的基本使用,这节课带大家学习一下Drools如何集成CDI。添加依赖首先使用drools7的话需要在正常使用CDI的基础上添加drools-cdi的依赖:<dependency> <groupId>org.drools</groupId> <artifactId>dro...原创 2019-01-06 21:39:11 · 866 阅读 · 2 评论 -
Drools7.12不再支持workbench tomcat版本
留心的朋友会发现,在官网下载workbench时7.12及以后版本再也找不到tomcat8的影子了。事件Drools7.12不再支持workbench tomcat版本,在之前版本中还是存在着tomcat8版本的支持。上面的截图中已经没有tomcat的选项了,原因原因有两种,一种是官方提出的解释:7.12之后不再支持tomcat版本,除非有人愿意为此版本提供维护和支持。另外猜测的...原创 2019-01-02 12:15:15 · 2050 阅读 · 0 评论 -
Drools决策表的使用
Drools 决策表的使用决策表简介引用官方的话 决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。 目前决策表支持xls格式和csv格式。决策表与现有的drools drl文件使用可以无缝替换。什么时候使用决策表规则能够被表达为模板+数据的格式,考虑使用决策表很少量的规则不建议使用决策表不是遵循一组规则模板的规则也不建议使用决策表决策表格式RuleSet原创 2017-12-19 22:34:23 · 11378 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》第4章 global全局变量
global 全局变量global用来定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。通常,可以用来为规则文件提供数据或服务。特别是用来操作规则执行结果的处理和从规则返回数据,比如执行结果的日志或值,或者与应用程序进行交互的规则的回调处理。全局变量并不会被插入到Working Memory中,因此,除非作为常量值,否则不应该将全局变量用于规则约束的判断中。对规则引擎中的fact修改,规则原创 2017-08-11 12:53:24 · 5443 阅读 · 0 评论 -
《Drools7.0.0.Final规则引擎教程》番外实例篇——获取规则名称和包名
场景在QQ(593177274)交流群中,有朋友问到这样一个问题,如果我执行了很多规则,调用fireAllRules方法只会返回触发了几条规则,那么我怎么知道哪些规则被触发了,并把这些触发的规则的名称存如数据库呢?其实这个问题很好解决,也是实践中必然会遇到的问题,为大家写了一个简单的示例。实践在前面的RHS语法章节中我们已经讲过预定义变量drools的简单实用,其实通过它就可以轻松的拿到规则相关的信原创 2017-08-11 07:49:09 · 4319 阅读 · 1 评论 -
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
3.2.4 KieServices该接口提供了很多方法,可以通过这些方法访问KIE关于构建和运行的相关对象,比如说可以获取KieContainer,利用KieContainer来访问KBase和KSession等信息;可以获取KieRepository对象,利用KieRepository来管理KieModule等。 KieServices就是一个中心,通过它来获取的各种对象来完成规则构建、管理和原创 2017-07-12 09:47:30 · 11176 阅读 · 3 评论 -
《Drools7.0.0.Final规则引擎教程》第1章 Drools简介
1.1 什么是规则引擎规则引擎是由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。大多数规则引擎都支持规则的次序和规则冲突检验,支持简单脚本语言的规则实现,支持通用开发语言的嵌入开发。目前业内有多个规则引擎可供使用,其中包括商业和开放源码选择。开源的代表是Drool原创 2017-07-05 17:15:22 · 29755 阅读 · 9 评论 -
《Drools7.0.0.Final规则引擎教程》第2章 追溯Drools5的使用
2.1 Drools5简述上面已经提到Drools是通过规则编译、规则收集和规则的执行来实现具体功能的。Drools5提供了以下主要实现API:KnowledgeBuilderKnowledgeBaseKnowledgePackageStatefulKnowledgeSessionStatelessKnowledgeSession 它们起到了对规则文件进行收集、编译、查错、插入fact原创 2017-07-06 16:22:15 · 14045 阅读 · 5 评论 -
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
3.1 Hello World 实例在上一章中介绍了Drools5x版本中规则引擎使用的实例,很明显在Drools7中KnowledgeBase类已经标注为“@Deprecated”——废弃。在本章节中介绍Drools7版本中的使用方法。后续实例都将默认使用此版本。 先看一下Drools项目的目录结构: Maven pom.xml文件中依赖配置:<properties> <dro原创 2017-07-07 12:28:14 · 11237 阅读 · 10 评论 -
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
3.2.1 什么是KIEKIE(Knowledge Is Everything),知识就是一切的简称。JBoss一系列项目的总称,在《Drools使用概述》章节已经介绍了KIE包含的大部分项目。它们之间有一定的关联,通用一些API。比如涉及到构建(building)、部署(deploying)和加载(loading)等方面都会以KIE作为前缀来表示这些是通用的API。 下图为KIE所包含的子项目结原创 2017-07-11 11:57:44 · 8539 阅读 · 0 评论 -
《Drools6.4 中文文档》第18章18.4 workbench配置
18.4. 配置18.4.1. 基本用户管理Workbench的认证系统采用服务器的用户鉴别和授权。 Jboss 的EAP和WildFly,添加一个用户在脚本文件$JBOSS_HOME/bin/add-user.sh。$ ./add-user.sh// Type: Application User// Realm: empty (defaults to ApplicationRealm)//翻译 2016-09-30 10:38:16 · 3620 阅读 · 0 评论 -
《Drools6.4 中文文档》第18章18.3 管理(组织单元&资源库)
18.3 管理18.3.1. 管理视图Workbench是由组织单元、VFS资源库和项目构成。 18.3.2. 组织单元组织单元便于模块和功能的划分,一个组织单元可以拥有多个资源库。 18.3.3. 资源仓库资源仓库是存储数据资产的地方,每个资源库由多个项目组成,并且只归属一个组织单元。 资源仓库实际上是一个基于存储的虚拟文件系统,默认使用GIT最为后端。以下步骤允许workbench使用翻译 2016-09-28 11:15:26 · 2013 阅读 · 0 评论 -
《Drools6.4 中文文档》第18章18.2 Quick Start(快速开始)
18.2. Quick Start(快速开始)以下步骤将帮助你花费最小的精力来开始使用,但它们是无法代替阅读整个文档的。18.2.1. 添加资源库选择管理视图,为你的项目创建一个资源库。图:18.1 选择管理视图(6.4中已经国际化已经支持中文,中文截图为译者新增) 选择“新建资料库” 图:18.2 新建资料库 输入所需信息 图:18.3 输入资源库信息,第一步。翻译 2016-09-22 14:13:18 · 4458 阅读 · 1 评论