Drools 语法
Drools 语法
规则语法
package: package 的名字是随意的,不必必须对应物理路径
import: 导入外部变量
规则的编译与运行要通过Drools 提供的各种API 来实现。
API 分为三类:规则编译、规则收集、规则执行
主要API:
KnowledgeBuilder 用来在业务代码中收集已经编写好的规则,对这些规则文件进行编译,最终产生一批编译好的规则包 knowledgePackage 给其他程序使用。
KnowledgeBase
StatefulKnowledgeSession
StatelessKnowledgeSession
它们起到了对 规则文件进行收集、编译、查错、插入fact、设置global、执行规则或者规则流
KnowledgeBuilder
用来在业务代码中收集已经编写好的规则,对这些规则文件进行编译,最终产生一批编译好的规则包 knowledgePackage 给其他程序使用。KnowledgeBuilder在编译规则的时候可以通过其提供的hasErrors()方法得到编译规则过程中发现规则是否有错误,如果有的话通过其提供的getErrors()方法将错误打印出来,以帮助我们找到规则当中的错误信息。
KnowledgeBuilder kbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("test.drl", Test.class),ResourceType.DRL); if(kbuilder.hasErrors()){
System.out.println("规则中存在错误,错误消息如下:");
KnowledgeBuilderErrors kbuidlerErrors=kbuilder.getErrors();
for(Iterator iter=kbuidlerErrors.iterator();iter.hasNext();)
{
System.out.println(iter.next());
}
} Collection<KnowledgePackage> kpackage=kbuilder.getKnowledgePackages();//产生规则包的集合
通过KnowledgeBuilder编译的规则文件的类型可以有很多种,如.drl文件、.dslr文件或一个xls文件等。
KnowledgeBase
KnowledgeBase 是Drools 提供的用来收集应用当中知识(knowledge)定义的知识库对象
可以包含 普通的规则(rule)、规则流(rule flow)、函数定义(function)、用户自定义对象(type model)
kenowledgeBase 本身不包含任何业务数据对象(fact)。
业务对象是插入到 knowledgeBase 产生的两种类型的Session对象中(StatefulKnowledgeSession 和 StatelessKnowledgeSession),通过Session对象可以触发规则执行和开始一个规则流执行
KnowledgeBaseConfiguration对象是一个用来存放规则引擎运行时相关环境参数定义的配置对象
StatefulKnowledgeSession
对象是一种最常用的与规则引擎进行交互的方式,它可以与规则引擎建立一个持续的交互通道,在推理计算的过程当中可能会多次触发同一数据集。在用户的代码当中,最后使用完StatefulKnowledgeSession对象之后,一定要调用其dispose()方法以释放相关内存资源。
在drools 规则引擎中,fact 所承担的作用就是讲规则中要用到的业务数据从应用当中传入进来,对于规则当中产生的数据及状态的变化通常不用fact 传出。如果需要数据传出,那么 设置global对象来实现。
在spring的applicationContext.xml中,加入:
<kie:import releaseId-ref="ksession-releaseId" enableScanner="true" scannerInterval="300000"/>
<kie:releaseId id="ksession-releaseId" groupId="com.test" artifactId="epay-risk" version="LATEST"/>
<bean id="kiePostProcessor"
class="org.kie.spring.annotations.KModuleAnnotationPostProcessor"/>
引入的目的是实现动态刷新规则jar包的规则。配置的时间是5分钟刷新一遍,最终实现业务规则的更新,不需要重启机器。加入以上配置后,eclipse报错,无法辨认kie:import等标签,需要在xml中加入:xmlns:kie="http://drools.org/schema/kie-spring"
还有:http://drools.org/schema/kie-spring https://raw.githubusercontent.com/droolsjbpm/droolsjbpm-integration/master/kie-spring/src/main/resources/org/kie/spring/kie-spring-6.0.0.xsd
Drools 语法的更多相关文章
- drools语法介绍
这里没有翻译http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html上的内容 而是参考了网 ...
- JAVA规则引擎 -- Drools
Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的de ...
- [Drools]JAVA规则引擎 -- Drools
Drools是一个基于Java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的de ...
- Drools(BRMS) 速成教程(上)
大家在日常开发中,肯定遇到过一些业务规则变来变去的需求,比如:会员积分系统(今天要新注册会员送10积分,明天要改成注册送优惠券,后天搞活动要改成注册自动变成高级会员...),此类需求,一般都是通过写i ...
- drools规则引擎初探
https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles Forgy的RETE算 ...
- [Drools]JAVA规则引擎 -- Drools- 转http://blog.csdn.net/quzishen/article/details/6163012
[Drools]JAVA规则引擎 -- Drools 标签: java引擎exceptiongetterstringsetter 2011-01-25 14:33 113340人阅读 评论(35) 收 ...
- Drools学习笔记
Drools是一款基于Java的开源规则引擎 实现了将业务决策从应用程序中分离出来. 优点: 1.简化系统架构,优化应用 2.提高系统的可维护性和维护成本 3.方便系统的整合 4.减少编写“硬代码”业 ...
- Drools介绍与使用
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值.Drools 允许使用声明方式表达业务逻辑.可以使用非 XML 的本地语言编写规则,从而便于学习和理解 ...
- Drools规则引擎实践直白总结
目录 1. 创建Drools环境(引入Drools相关依赖包.现在都流行spring boot,故最简单有效的依赖才是最好的,kie-spring内部自行依赖了drools相关核心的依赖包) 2. 了 ...
随机推荐
- 项目中开机自启动的 node-webkit开机自启动
node-webkit开机自启动 Posted in 前端, 后端 By KeenWon On 2014年8月11日 Views: 1,215 node-webkit没有提供开机自启动的接口,在git ...
- Mac上把python源文件编译成so文件
把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...
- nginx源码分析:module机制
根据nginx官方文档,添加一个module的介绍,当我们需要添加一个module时,需要以下操作: 1.为该module新建一个目录. 2.添加一个config文件,一个module核心代码源文件. ...
- Leetcode:Longest Substring Without Repeating Characters 解题报告
Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...
- Lintcode: Minimum Subarray 解题报告
Minimum Subarray 原题链接: http://lintcode.com/zh-cn/problem/minimum-subarray/# Given an array of intege ...
- 【机器学习】粗糙集属性约简算法与mRMR算法的本质区别
1. 粗糙集属性约简算法仅仅选出属性重要度大的条件加入约减中,没有考虑约简中条件属性相互之间的冗余性,得到的约简往往不是都必要的,即含有冗余属性. 2. mRMR算法则除了考虑特征与类别之间的相关性, ...
- Python爬网——获取安卓手机统计数据
[本文出自天外归云的博客园] 1. 在安卓网上对热门机型进行爬网,取前五十: # -*- coding: utf-8 -*- import requests,re from bs4 import Be ...
- 针对后台TCP服务F5健康检查配置
1.TCP-HALF-OPEN方式 TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN ...
- 基于html5可拖拽图片循环滚动切换
分享一款基于html5可拖拽图片循环滚动切换.这是一款支持手机端拖拽切换的网站图片循环滚动特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="s ...
- 微服务之springCloud-hystrix参数详解(八)
简介 上节我们讨论了hystrix+feign+ribbon,但是可能很多人都知道hystrix还有线程隔离,信号量隔离,等等各种参数配置,在这几就记录下hystrix的参数, 一.hystrix参数 ...