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 语法的更多相关文章

  1. drools语法介绍

    这里没有翻译http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html上的内容 而是参考了网 ...

  2. JAVA规则引擎 -- Drools

    Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的de ...

  3. [Drools]JAVA规则引擎 -- Drools

    Drools是一个基于Java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的de ...

  4. Drools(BRMS) 速成教程(上)

    大家在日常开发中,肯定遇到过一些业务规则变来变去的需求,比如:会员积分系统(今天要新注册会员送10积分,明天要改成注册送优惠券,后天搞活动要改成注册自动变成高级会员...),此类需求,一般都是通过写i ...

  5. drools规则引擎初探

    https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算 ...

  6. [Drools]JAVA规则引擎 -- Drools- 转http://blog.csdn.net/quzishen/article/details/6163012

    [Drools]JAVA规则引擎 -- Drools 标签: java引擎exceptiongetterstringsetter 2011-01-25 14:33 113340人阅读 评论(35) 收 ...

  7. Drools学习笔记

    Drools是一款基于Java的开源规则引擎 实现了将业务决策从应用程序中分离出来. 优点: 1.简化系统架构,优化应用 2.提高系统的可维护性和维护成本 3.方便系统的整合 4.减少编写“硬代码”业 ...

  8. Drools介绍与使用

    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值.Drools 允许使用声明方式表达业务逻辑.可以使用非 XML 的本地语言编写规则,从而便于学习和理解 ...

  9. Drools规则引擎实践直白总结

    目录 1. 创建Drools环境(引入Drools相关依赖包.现在都流行spring boot,故最简单有效的依赖才是最好的,kie-spring内部自行依赖了drools相关核心的依赖包) 2. 了 ...

随机推荐

  1. JMeter测试工具中的参数化使用[函数助手]

    下面是我使用JMeter测试工具对某项目中的一个http接口进行测试时的配置参数,使用到了JMeter的随机函数: 在发送POST请求时,需要发送json格式的数据,其中使用到JMeter的" ...

  2. LVS之NAT模型、DR模型配置和持久连接

    前言:继LVS概述,本篇实现NAT模型和DR模型下的负载均衡. NAT模型: LVS-NAT基于cisco的LocalDirector.VS/NAT不需要在RealServer上做任何设置,其只要能提 ...

  3. 秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现

    Reference:  http://blog.ruaby.com/?p=256 并发事务处理带来的问题? 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从 ...

  4. [转]java中参数" ..."的用法和意思

    原文地址:https://blog.csdn.net/lycit/article/details/78809625 如这个jdbc中封装的绑定参数的方法: /** * 绑定参数 * @param ps ...

  5. PopupWindow 常用方法学习笔记

    PopupWindow可以实现浮层效果,而且可以自定义显示位置,出现和退出时的动画. 首先解析一个View LayoutInflater inflater = getLayoutInflater(); ...

  6. 【常用配置】——WPS文字常用快捷键大全【史上最全面】转

    WPS文字快捷键大全 Word快捷键 Excel快捷键 PPT快捷键 Office快捷键大全 WPS文字快捷键 WPS表格快捷键 WPS演示快捷键 WPS快捷键大全 用于处理WPS文档的快捷键 创建新 ...

  7. 【linux】——一个小程序

    利用工作之余为小伙伴写了份作业,关于进程间通信的.题目如下: 父进程从键盘上接受1000个数据,对其求和sum1,子进程对这1000个数平方和sum2,结果传给父进程,父进程将sum1+sum2后,打 ...

  8. 使用 js替换网页中的关键词为链接

    要求把一段html脚本中的疾病名添加到疾病库的链接,只添加一次,要避开超链接或图片链接. 最初是用的    str.replace('糖尿病', '<a href=...>糖尿病</ ...

  9. 浅谈C++中对象的复制与对象之间的相互赋值

    C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义 ...

  10. Android pid uid

    PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在a ...