• 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

  • 相关阅读:
    BaseDao
    url中文参数解决方案
    Ajax实现步骤和原理
    在服务器端使用文件时的路径解决方案
    用户验证登录拦截器
    jenkins环境搭建
    gitlab环境搭建
    nexus3.X环境搭建
    base64文件大小计算
    JVM远程调试功能
  • 原文地址:https://www.cnblogs.com/panie2015/p/6636409.html
Copyright © 2020-2023  润新知