当前位置: 首页 > news >正文

Drools 7 Modify 和对象直接赋值差异

  • modify代表修改fact,会再次触发符合条件的rule
  • 对象直接修改只是java 操作,不会会再次触发符合条件的rule

以下为测试代码-drl部分


package org.drools.learnimport org.drools.learn.ModifyTest.Message;global java.util.List listrule "Stateless modify"
// 注意使用了mvel,用java会报status 不是publicdialect "mvel"whenm : Message( status == Message.HELLO, message : message )thenSystem.out.println( message + " in thread " + Thread.currentThread().getId()+","+System.currentTimeMillis());modify ( m ) { message = "Goodbye cruel world",status = Message.GOODBYE };endrule "Stateless Good Bye"
// 注意使用了mveldialect "mvel"wheno : Message( status == Message.GOODBYE, message : message )thenSystem.out.println( " Stateless Good Bye in thread " + Thread.currentThread().getId()+","+System.currentTimeMillis());// 使用set 不会触发rule执行o.setMessage("changed by drl");o.setStatus (100);//  modify ( o ) { message = "100 cruel world",//                    status = 100 };endrule "Stateless 100 "dialect "java"auto-focus truewheno : Message( status == 100, message : message )thenSystem.out.println( " Stateless 100 should not be printed ,but it printed in  " + Thread.currentThread().getId()+","+System.currentTimeMillis());end
测试java代码package org.drools.learn;import org.drools.core.io.impl.ClassPathResource;
import org.kie.api.KieBase;
import org.kie.api.KieBaseConfiguration;
import org.kie.api.KieServices;
import org.kie.api.conf.EqualityBehaviorOption;
import org.kie.api.conf.SequentialOption;
import org.kie.api.io.Resource;
import org.kie.api.logger.KieRuntimeLogger;
import org.kie.api.runtime.StatelessKieSession;
import org.kie.internal.conf.ConsequenceExceptionHandlerOption;
import org.kie.internal.conf.MultithreadEvaluationOption;
import org.kie.internal.utils.KieHelper;import java.util.ArrayList;
import java.util.List;public class ModifyTest {private static KieBase kieBase;private static KieBaseConfiguration kieBaseConf;// private static KieSessionConfiguration kieBaseConf;public static final void main(final String[] args) {// From the kie services, a container is created from the classpathKieServices ks=KieServices.get();kieBaseConf= ks.newKieBaseConfiguration();//设置SequentialOption以提升性能kieBaseConf.setOption(SequentialOption.YES);//设置使用对象的equals函数来进行对象比较kieBaseConf.setOption(EqualityBehaviorOption.EQUALITY);//设置exception 捕获,不设置为默认使用org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandlerkieBaseConf.setOption(ConsequenceExceptionHandlerOption.get(DroolsConsequenceExceptionHandler.class));// kieBaseConf.setOption(MultithreadEvaluationOption.YES);//使用resource模式装载,参考https://zhuanlan.zhihu.com/p/519969197Resource resource =new ClassPathResource("org/drools/learn/ModifyTest.drl");KieBase base=new KieHelper().addResource(resource).build(kieBaseConf);StatelessKieSession ksession = base.newStatelessKieSession();ArrayList result=new ArrayList<Object>();ksession.setGlobal( "list",  result);// The application can insert facts into the sessionMessage message = new Message();message.setMessage( "Hello World" );message.setStatus( Message.HELLO );ksession.execute( message );System.out.println("message status change to "+message.getStatus());}public static class Message {public static final int HELLO   = 0;public static final int GOODBYE = 1;private String          message;private int             status;public Message() {}public String getMessage() {return this.message;}public void setMessage(final String message) {this.message = message;}public int getStatus() {return this.status;}public void setStatus(final int status) {this.status = status;}public static Message doSomething(Message message) {return message;}public boolean isSomething(String msg,List<Object> list) {list.add( this );return this.message.equals( msg );}}}

相关文章:

Drools 7 Modify 和对象直接赋值差异

modify代表修改fact&#xff0c;会再次触发符合条件的rule对象直接修改只是java 操作&#xff0c;不会会再次触发符合条件的rule 以下为测试代码-drl部分 package org.drools.learnimport org.drools.learn.ModifyTest.Message;global java.util.List listrule "Stateles…...

vivado产生报告阅读分析21

其他命令选项 • -of_objects <suggestion objects> &#xff1a; 启用特定建议的报告。在此模式下运行时 &#xff0c; report_qor_suggestions 不会生成新建议。此命令可快速执行 &#xff0c; 读取 RQS 文件后 &#xff0c; 此命令可用于查看其中包 含的建议。其…...

9.Docker的虚悬镜像-Dangling Image

1.虚悬镜像的概念 虚悬镜像 (Dangling Image) 指的是仓库名 (镜像名) 和标签 TAG 都是 的镜像。 2.构建本地虚悬镜像 这里我以unbuntu为例来说明。 2.1 编写Dockerfile文件 FROM ubuntu:22.042.2 根据Dockerfile文件构建虚悬镜像 docker build .上面这段命令&#xff0c…...

02- OpenCV:加载、修改、保存图像

目录 1、加载图像&#xff08;cv::imread&#xff09; 2、显示图像 (cv::namedWindos 与cv::imshow) 3、修改图像 (cv::cvtColor) 4、保存图像(cv::imwrite) 5、代码演示 1、加载图像&#xff08;cv::imread&#xff09; cv::imread 是 OpenCV 库中用于读取图像文件的函数…...

4面试题--数据库(mysql)

执⾏⼀条 select / update 语句&#xff0c;在 MySQL 中发⽣了什么&#xff1f; Server 层负责建⽴连接、分析和执⾏ SQL。MySQL ⼤多数的核⼼功能模块都在这实现&#xff0c;主要包括 连接器&#xff0c;查询缓存&#xff08;8.0版本去除&#xff0c;因为每次更新将会清空该…...

【LeeCode】283.移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 解【做的有点呆&#xff0c;额外设置了计数器变量统计0的个数再从后往前赋0】&#xff1a…...

OSG粒子系统与阴影-自定义粒子系统示例<2>(5)

自定义粒子系统示例(二) 目前自定义粒子的方法有很多&#xff0c;在OSG 中使用的是 Billboard 技术与色彩融合技术。色彩融合是一种高级的渲染技术&#xff0c;如果读者有兴趣&#xff0c;可参看 OSG 粒子系统实现的源代码。这里采用简单的布告牌技术(osg::Billboard)与动画来实…...

微软 Edge 浏览器目前无法支持 avif 格式

avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式&#xff0c;那么只能通过浏览器打开&#xff0c;然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持&#xff0c;目前不支持的可能就只有 Edge 浏览器。…...

用python实现文字转语音的5个较好用的模块

文章目录 一. 用 gtts 模块二. 用pyttsx3模块基本使用直接朗读更改语音、速率和音量 三. baidu-aip四. pywin32五. speech 一. 用 gtts 模块 参考文档&#xff1a;https://gtts.readthedocs.io/en/latest/ 使用前需要先安装&#xff1a;pip3 install gtts &#xff0c;样例如…...

Windows Server 2012R2 修复CVE-2016-2183(SSL/TLS)漏洞的办法

一、漏洞说明 Windows server 2012R2远程桌面服务SSL加密默认是开启的,且有默认的CA证书。由于SSL/ TLS自身存在漏洞缺陷,当开启远程桌面服务,使用漏洞扫描工具扫描,发现存在SSL/TSL漏洞。远程主机支持的SSL加密算法提供了中等强度的加密算法,目前,使用密钥长度大于等于5…...

python统计字符串中大小写字符个数的性能实测与分析

给定一个字符串&#xff0c;统计字符串中大写字符个数&#xff0c;有如下三种方法&#xff1a; # method1 s1 len(re.findall(r[A-Z],content)) # method2 s2 sum(1 for c in content if c.isupper()) # method3 s3 0 for c in content:if c.isupper()True:s31经过多次实测…...

时间序列预测实战(十九)魔改Informer模型进行滚动长期预测(科研版本)

论文地址->Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 个人魔改版本地址-> 文章末尾 一、本文介绍 在之前的文章中我们已经讲过Informer模型了&#xff0c;但是呢官方的预测功能开发的很简陋只能设定固定长度去预测未…...

[PyTorch][chapter 64][强化学习-DQN]

前言&#xff1a; DQN 就是结合了深度学习和强化学习的一种算法&#xff0c;最初是 DeepMind 在 NIPS 2013年提出&#xff0c;它的核心利润包括马尔科夫决策链以及贝尔曼公式。 Q-learning的核心在于Q表格&#xff0c;通过建立Q表格来为行动提供指引&#xff0c;但这适用于状态…...

用好语言模型:temperature、top-p等核心参数解析

编者按&#xff1a;我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数&#xff0c;帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数&#xff0c;以优化语言模型的生成效果。 文章详细解释了这些参数的作用…...

python之pycryptodome模块,加密算法库

一、简介 PyCryptodome是PyCrypto库的一个分支&#xff0c;它是Python中最受欢迎的密码学库之一。PyCryptodome提供了许多密码学算法和协议的实现&#xff0c;包括对称加密、非对称加密、消息摘要、密码哈希、数字签名等。它还提供了一些其他功能&#xff0c;如密码学安全随机…...

IDEA如何将本地项目推送到GitHub上?

大家好&#xff0c;我是G探险者。 IntelliJ IDEA 是一个强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它支持多种编程语言和工具。它也内置了对Git和GitHub的支持&#xff0c;让开发者可以轻松地将本地项目推送到GitHub上。以下是一个操作手册&#xff0c;描述了…...

Leetcode—45.跳跃游戏II【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—45.跳跃游戏II 贪心法思想 实现代码 #define MAX(a, b) (a > b ? (a) : (b))int jump(int* nums, int numsSize) {int start 0;int end 1;int ans 0;int maxStride 0;while(end < numsSize) {maxStride 0;fo…...

基于Vue+SpringBoot的木马文件检测系统

项目编号&#xff1a; S 041 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S041&#xff0c;文末获取源码。} 项目编号&#xff1a;S041&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木…...

springboot内置Tomcat流程

1、org.springframework.boot.SpringApplication#initialize setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));加载了org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext 2、spring refres…...

Android修行手册-溢出父布局的按钮实现点击

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

【Linux命令饲养指南】CentOS 安装 MySQL【AI辅助实现】

声明&#xff1a;由于本人经常记混 Linux 软件安装和卸载命令&#xff0c;本文相关步骤是在 AI 辅助下整理完成&#xff0c;仅供参考。⚠️ 补充说明&#xff1a;CentOS 系统官方已停止维护(如果你使用CentOS 那么yum可能使用不了)&#xff0c;本文示例环境为 Rocky Linux&…...

Umi-OCR完整指南:5分钟掌握免费离线文字识别技巧

Umi-OCR完整指南&#xff1a;5分钟掌握免费离线文字识别技巧 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。…...

Qt原子变量避坑指南:从QAtomicFlag到QAtomicPointer,这些内存顺序和ABA问题你搞明白了吗?

Qt原子变量深度避坑指南&#xff1a;从内存顺序到ABA问题的实战解析 在Qt多线程开发中&#xff0c;原子变量就像一把双刃剑——用得好可以大幅提升性能&#xff0c;用不好则会引入难以调试的幽灵问题。上周团队就遇到一个典型案例&#xff1a;在ARM服务器上运行良好的无锁队列&…...

海洋边缘计算:Switch与Forwarder底层网络架构实战

摘要&#xff1a;在复杂的海洋工业环境中&#xff0c;边缘通信节点的架构直接影响系统的隔离能力。本文从嵌入式Linux底层出发&#xff0c;剥析通用海事网关的处理逻辑&#xff0c;演示利用代码构建防御管道。 导语&#xff1a;随着船舶工业向IT与OT深度融合演进&#xff0c;为…...

深入解析Pintos优先级捐赠机制:从理论到实践

1. 优先级反转问题与捐赠机制 我第一次在Pintos里遇到优先级反转问题时&#xff0c;系统直接卡死了——高优先级线程H等着低优先级线程L释放锁&#xff0c;但L根本抢不到CPU。这种场景就像救护车被堵在卡车后面&#xff0c;而卡车司机正在等红灯。操作系统课程里把这个现象称为…...

别再只调参了!手把手教你用Verilog和PYNQ在FPGA上‘搓’一个YOLOv3-Tiny加速器

别再只调参了&#xff01;手把手教你用Verilog和PYNQ在FPGA上‘搓’一个YOLOv3-Tiny加速器 当算法工程师第一次看到FPGA上运行的神经网络推理速度提升3倍时&#xff0c;往往会露出难以置信的表情。这就像习惯了用瑞士军刀的人突然发现身边还有台数控机床——硬件加速带来的性能…...

如何完整破解Cursor Pro限制:一键激活与无限使用的终极指南

如何完整破解Cursor Pro限制&#xff1a;一键激活与无限使用的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...

OCR技术进阶:深入理解Layout Analysis的版面划分策略

1. 从OCR到Layout Analysis的技术脉络 当你用手机拍摄一张包含文字的图片时&#xff0c;系统能自动识别其中的文字内容&#xff0c;这背后离不开OCR技术的支持。但很多人不知道的是&#xff0c;在文字识别之前&#xff0c;系统需要先理解图片的版面结构——这就是Layout Analy…...

DDrawCompat终极指南:让老游戏在现代Windows上焕发新生

DDrawCompat终极指南&#xff1a;让老游戏在现代Windows上焕发新生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDraw…...

深入PX4Ctrl状态机:从AUTO_TAKEOFF到AUTO_HOVER,看无人机起飞背后的控制逻辑设计

深入PX4Ctrl状态机&#xff1a;从AUTO_TAKEOFF到AUTO_HOVER&#xff0c;看无人机起飞背后的控制逻辑设计 无人机自主起飞看似简单&#xff0c;实则蕴含精妙的状态机设计与控制逻辑。PX4Ctrl作为开源飞控中的核心模块&#xff0c;其状态机设计体现了工业级无人机控制系统的典型…...