规则引擎drools Part5
规则引擎drools Part5
Drools Workbench
- Drools Workbench是可视化的规则编辑器,用来授权和管理业务规则。workbench的war包下载地址,安装到tomcat中就可以运行了。使用workbench可以在浏览器中创建数据对象、规则文件、测试场景并把规则部署到maven仓库方便其他应用使用。
- workbench部署步骤
-
需要安装配置jdk、maven、tomcat
-
把下载的kie-drools-wb-7.10.0.Final-tomcat8.war改名为kie-drools-wb.war
-
在tomcat/bin目录下创建setenv.bat文件,添加配置
# 其中配置CATALINA_HOME为tomcat的安装目录
CATALINA_OPTS="-Xmx512M \-Djava.security.auth.login.config=$CATALINA_HOME/webapps/kie-drools-wb/WEB-INF/classes/login.config \-Dorg.jboss.logging.provider=jdk"
- 修改tomcat/conf/tomcat-users.xml文件,添加用户kie
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><!--定义admin角色--><role rolename="admin"/><!--定义一个用户,用户名为kie,密码为kie,对应的角色为admin角色--><user username="kie" password="kie" roles="admin"/>
</tomcat-users>
- 在tomcat/conf/server.xml文件添加配置
<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- SingleSignOn valve, share authentication between web applicationsDocumentation at: /docs/config/valve.html --><!--<Valve className="org.apache.catalina.authenticator.SingleSignOn" />--><!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /> --><!-- 新增配置 --><Value className="org.kie.integration.tomcat.JACCValve"/>
</Host>
- 下载以下Jar包并添加到tomcat/lib目录下
kie-tomcat-integration-7.10.0.Final.jar
jakarta.security.jacc-api-1.6.1.jar
slf4j-api-1.7.25.jar
- 启动tomcat,访问workbench首页,使用kie/kie登录
http://localhost:8080/kie-drools-wb/kie-drools-wb.jsp
- Drools Workbench的使用
使用WorkBench时,首先创建空间或者使用默认的空间,然后在空间中创建项目,最后在项目中创建数据对象、规则文件、测试场景等。创建项目时会使用到maven下载依赖。
(1)创建数据对象,指定名称和软件包,添加字段后自动生成对应的java源码类Student.java
package com.jzy.demo;/*** This class was automatically generated by the data modeler tool.*/public class Student implements java.io.Serializable {static final long serialVersionUID = 1L;private Integer id;private java.lang.String name;private int age;private java.lang.String address;public Student() {}public java.lang.String getName() {return this.name;}public void setName(java.lang.String name) {this.name = name;}public int getAge() {return this.age;}public void setAge(int age) {this.age = age;}public java.lang.String getAddress() {return this.address;}public void setAddress(java.lang.String address) {this.address = address;}public java.lang.Integer getId() {return this.id;}public void setId(java.lang.Integer id) {this.id = id;}public Student(java.lang.Integer id, java.lang.String name, int age,java.lang.String address) {this.id = id;this.name = name;this.age = age;this.address = address;}}
(2)创建规则文件student.drl
package com.jzy.demo;
import com.jzy.demo.Studentrule "rule_1"whencom.jzy.demo.Student(age < 20 && name != null)thenSystem.out.println("rule1 activated.");
end
(3)在项目视图点击设置,添加Kie bases
(4)在项目视图点击build构建,使用deploy发布后在本地maven库生成一个jar包
(5)在maven项目中使用workbench生成的包
- 创建一个Student类,与workbench中创建的包名类名完全相同,属性也要对应
- 通过远程加载maven仓库中的jar包完成规则调用
public static void main(String[] args) throws Exception{//通过此URL可以访问到maven仓库中的jar包//URL地址构成:http://ip地址:Tomcat端口号/WorkBench工程名/maven2/坐标/版本号/xxx.jarString url = "http://localhost:8080/kie-drools-wb/maven2/com/jzy/demo/1.0.0/demo-1.0.0.jar"; KieServices kieServices = KieServices.Factory.get();//通过Resource资源对象加载jar包UrlResource resource = (UrlResource) kieServices.getResources().newUrlResource(url);//通过Workbench提供的服务来访问maven仓库中的jar包资源,需要先进行Workbench的认证resource.setUsername("kie");resource.setPassword("kie");resource.setBasicAuthentication("enabled"); //将资源转换为输入流,通过此输入流可以读取jar包数据InputStream inputStream = resource.getInputStream(); //创建仓库对象,仓库对象中保存Drools的规则信息KieRepository repository = kieServices.getRepository();//通过输入流读取maven仓库中的jar包数据,包装成KieModule模块添加到仓库中KieModule kieModule = repository.addKieModule(kieServices.getResources().newInputStreamResource(inputStream)); //基于KieModule模块创建容器对象,从容器中可以获取session会话KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());KieSession session = kieContainer.newKieSession();Student stu = new Student();stu.setAge(12);session.insert(stu);session.fireAllRules();session.dispose();
}
相关文章:
规则引擎drools Part5
规则引擎drools Part5 Drools Workbench Drools Workbench是可视化的规则编辑器,用来授权和管理业务规则。workbench的war包下载地址,安装到tomcat中就可以运行了。使用workbench可以在浏览器中创建数据对象、规则文件、测试场景并把规则部署到maven仓…...
API设计之争:一个接口一个职能还是一个页面所需字段?
在软件开发中,设计API接口是一个重要而且复杂的任务。在设计API接口时,一个常见的问题是,是按照每个接口的职能来设计,还是按照每个页面所需的字段来设计? 本文将对这两种设计方法进行比较,并探讨它们的优…...
第一天复习Qt文件读取
Qt文件操作: 1、QFile QTextStream操作文件案例: 1、打开文件 QFile file(absolute filepath | relative path); file.readLine()返回内容长度,如果为-1就是读取失败 file. Close()读取后关闭 file.errorString()返回文件打开发生的错误2、…...
使用非官网购买Chatgpt的api调用
测试代码 from openai import OpenAI client OpenAI(api_key用户密钥) import json import os import timeclass ChatGPT:def __init__(self, user):self.user userself.messages [{"role": "system", "content": "Agent"}]def as…...
通过 Java 操作 redis -- hash 哈希表基本命令
目录 使用命令 hset,hget 使用命令 hexists 使用命令 hdel 使用命令 hkeys,hvals 使用命令 hmget,hmset 关于 redis hash 哈希表类型的相关命令推荐看Redis - hash 哈希表 要想通过 Java 操作 redis,首先要连接上 redis 服务…...
Unity 性能优化之遮挡剔除(Occlusion Culling)(六)
提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、遮挡剔除是什么?二、静态遮挡剔除的使用步骤1.标记为遮挡剔除对象2.创建Occlusion Area组件3.烘焙4.Occlusion窗口Bake的参数Smallest Oc…...
android——关于app性能优化篇
前言 应用性能优化是指通过各种技术手段和优化策略,提高应用程序的性能,使其能够更高效地运行和响应用户操作。 下面介绍一些常见的应用性能优化方法 一、布局优化 1、减少嵌套 嵌套层数尽量少,使用ConstaintLayout能使层级大大降低尽量使…...
单链表经典算法LeetCode--203.移除链表元素(两种方法解)
1.链接:. - 力扣(LeetCode)【点击即可跳转】 分析此题提供两种思路: 1.遍历原链表,将值为val的节点释放掉(双指针法) 定义一个pcur指针指向头节点,定义一个prev指针指向NULL 需要注…...
MySQL—子查询
目录 ▐ 子查询概述 ▐ 准备工作 ▐ 标量子查询 ▐ 列子查询 ▐ 表子查询 ▐ 多信息嵌套 ▐ 子查询概述 • 子查询也称嵌套查询,即在一个查询语句中又出现了查询语句 • 子查询可以出现在from 后面 或where后面 • 出现在 from 后称表子查询,结…...
ffmpeg 读取流报错: Non-monotonous DTS in output stream
在处理媒体文件时,我们可能会遇到各种错误,其中之一就是“Non-monotonous DTS in output stream 0:1; previous: 36963866, current: 36611997; changing to 36963867. This may result in incorrect timestamps in the output file.”这个错误通常发生在…...
yo!这里是socket网络编程相关介绍
目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…...
polars学习-03 数据类型转换
背景 polars学习系列文章,第3篇 数据类型转换。 该系列文章会分享到github,大家可以去下载jupyter文件 仓库地址:https://github.com/DataShare-duo/polars_learn 小编运行环境 import sysprint(python 版本:,sys.version.spli…...
IDC 权威认可!Aloudata 入选金融领域中数据管理分析服务最佳实践案例
近日,国际知名数据咨询机构 IDC 重磅发布了《IDC PeerScape:金融领域中数据管理分析服务最佳实践案例》报告,Aloudata 与招商银行联合打造的 DDH 数据研发运维一体化平台成功入选,Aloudata 的技术、产品实力,以及在金融…...
RSA与AES算法比较及应用场景推荐
摘要:在现代加密通信中,RSA算法和AES算法被广泛应用。RSA算法是一种非对称加密算法,而AES算法是一种对称加密算法。本文将对比分析这两种算法的原理、性能及适用场景,并给出相应的推荐建议。 一、RSA算法简介 RSA算法࿰…...
揭秘 HTTP 代理:增强在线活动的安全性和匿名性
HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界,探索它们的优势、应用程序以及最大化其效用的最佳实践。…...
【经验】mysql冷热数据分离
使用mysql存储时,为了提升数据的查询效率,降低磁盘存储压力等,我们常常使用"冷热数据分离"分离的方案。即,将数据从所谓的“热表”(即经常有写入和查询操作的活跃表)迁移到“冷表”(用…...
【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析
🎩 欢迎来到技术探索的奇幻世界👨💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...
蓝桥杯国赛每日一题:日志统计(双指针)
题目描述: 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N行。 其中每一行的格式是: ts id 表示在 ts时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长…...
佛山MES公司(盈致mes系统服务商)助力企业实现智能制造
佛山是中国制造业著名的城市之一,拥有众多制造企业。随着科技的不断发展和智能制造的兴起,越来越多的企业开始意识到数字化生产管理的重要性,MES制造执行系统作为智能制造的关键技术之一,受到了越来越多企业的关注和应用。 在佛山…...
算法设计课第五周(贪心法实现活动选择问题)
目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 (1)熟悉贪心法的设计思想 (2)理解贪心法的最优解与正确性证明之间的关系 (3)比较活动选择的各种“贪心”策略,…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
