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 );}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nacos安装使用

Nacos安装使用 官方下载地址: https://github.com/alibaba/nacos/releases 官方文档地址: https://nacos.io/zh-cn/docs/quick-start.html Nacos介绍 Nacos是阿里巴巴开源的一款支持服务注册与发现&#xff0c;配置管理以及微服务管理的组件。用来取代以前常用的注册中心&a…

【微软技术栈】与其他异步模式和类型互操作

本文内容 任务和异步编程模型 (APM)任务和基于事件的异步模式 (EAP)任务和等待句柄 .NET 中异步模式的简短历史记录&#xff1a; .NET Framework 1.0 引进了 IAsyncResult 模式&#xff0c;也称为异步编程模型 (APM) 或 Begin/End 模式。.NET Framework 2.0 增加了基于事件的…

等待多个请求(请求并发执行)都完成后结束Loading框

等待多个请求&#xff08;请求并发执行&#xff09;都完成后结束Loading框 // 这里用vue进行示范&#xff0c;react使用useEffect是一样的 onMounted(() > initializeApp(initSwiper(),initNoticeText(),initCardTypes(),initCards() ));/*** 传入多个promise对象&#xff…

第二十章 解读PASCAL VOC2012与MS COCO数据集(工具)

PASCAL VOC2012数据集 Pascal VOC2012官网地址&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ 官方发表关于介绍数据集的文章 《The PASCALVisual Object Classes Challenge: A Retrospective》&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/pubs/everi…

CH01_适应设计模式

Iterator模式&#xff08;迭代器模式&#xff09; 迭代器模式&#xff08;Iterator&#xff09;,提供一种方法&#xff0c;顺序访问一个聚合对象中各个元素&#xff0c;而不是暴露该对象的内部表示。 类图结构 说明 Iterator&#xff08;迭代器&#xff09; 该角色负责定义按…

深入理解 Django 中的事务管理

概要 在数据库操作中&#xff0c;事务是确保数据完整性和一致性的关键机制。Django 作为一个强大的 Python Web 框架&#xff0c;提供了灵活而强大的事务管理功能。理解和正确使用 Django 中的事务对于开发高质量的 Web 应用至关重要。本文将深入探讨 Django 的事务管理机制&a…

2.多行输入【2023.11.24】

1.问题描述 编写一个Python程序&#xff0c;将字符串 ‘Hello World!’ 存储在变量 str1 中&#xff0c;将字符串 ‘Hello Python!’ 存储在变量 str2 中&#xff0c;然后使用 print 语句分别将它们在不同行打印出来。 2.解决思路 使用print()函数即可 3.代码实现 str1&qu…

MATLAB算法实战应用案例精讲-【数模应用】漫谈机器学习(四)(附实战案例及代码实现)

目录 机器学习学习路线 学习编写抽象类 固定随机数种子 先加载少量数据

1.5 C语言之字符输入输出

1.5 C语言之字符输入输出 一、概述二、字符计数三、行计数四、单词计数五、练习 一、概述 字符文本流&#xff0c;是由多行字符构成的字符序列&#xff0c;而每行字符都由0个或多个字符组成&#xff0c;行末是一个换行符。 标准库提供的输入输出模型&#xff0c;用于读取文本内…

前端vue3——html2canvas给网站截图生成宣传海报

文章目录 ⭐前言⭐选择html2canvas实现网页截图&#x1f496; 截图 ⭐图片url截图显示不出来问题&#x1f496; 解决 ⭐最终效果&#x1f496; 定义海报 ⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端vue3——html2canvas给网站截图生成宣传…

JVM字节码文件的相关概述解读

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 1、字节码文件 从下面这个图就可以看出&#xff0c;字节码文件是可以跨平台使用的 想要让一个Java程序正确地运行在JVM中&#xff0c;Java源码就必须要被编译为符合JVM规范的字节码。 https://docs.oracle.com/java…

C++面试,const的使用

#include <iostream> #include <cstring>int main() {const int x 1;int b 10;int c 20;const int* a1 &b;int* const a2 &b;const int* const a3 &b;x 2;a1 &c;*a1 1;a2 &c;*a2 1;a3 &c;*a3 1;return 0; }错误1&#xff1a;…

3. 深入探究文件 IO

3. 深入探究文件 IO 1. Linux 系统如何管理文件1.1 静态文件与inode1.2 文件打开时的状态 2. 返回错误处理与errno2.1 strerror 函数2.2 perror 函数 3. 空洞文件4. O_APPEND 和 O_TRUNC5. 多次打开同一个文件6. 复制文件描述符6.1 dup6.2 dup2 7. 文件共享7.1 同一个进程中多次…

Mono 8、Mono 10、Mono 10 Packed、Mono 12、Mono 12 Packe等像素格式简介

Mono 8、Mono 10、Mono 10 Packed、Mono 12、Mono 12 Packed这几种像素格式在灰度图中的区别和联系如下&#xff1a; Mono 8&#xff1a;每个像素使用8位&#xff08;1字节&#xff09;表示灰度值&#xff0c;范围是0-255。这种格式在处理黑白图像时非常常见。 Mono 10&#…

Python 测试框架 Pytest 的入门

简介 pytest 是一个功能强大而易于使用的 Python 测试框架。它提供了简单的语法和灵活的功能&#xff0c;用于编写和组织测试代码。 1、简单易用&#xff1a;pytest 的语法简洁明了&#xff0c;使得编写测试用例更加直观和易于理解。它使用 assert 语句来验证预期结果&#x…

接口测试 — 到底在做什么?

1、常见的接口面试问题 1、http网络协议的介绍 是否了解网络协议是否了解接口的数据通信是否了解常用的接口请求方法接口测试的核心底层逻辑 2、接口的健全机制 cookie、Session、token三者的用途&#xff0c;以及各自的机制 3、接口关联的测试实现 基于集权机制、基于网…

从0到0.01入门 Webpack| 005.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【蓝桥杯】刷题

刷题网站 记录总结刷题过程中遇到的一些问题 1、最大公约数与最小公倍数 a,bmap(int,input().split())sa*bwhile a%b:a,bb,a%bprint(b,s//b)2.迭代法求平方根(题号1021) #include<stdio.h> #include<math.h> int main() {double x11.0,x2;int a;scanf("%d&…

【RTP】RTPSenderAudio::SendAudio

RTPSenderAudio 可以将一个opus帧封装为rtp包进行发送,以下是其过程:RTPSenderAudio::SendAudio :只需要提供payload部分 创建RtpPacketToSend 并写入各个部分 填充payload部分 sender 本身分配全session唯一的twcc序号 if (!rtp_sender_->

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

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