zoukankan      html  css  js  c++  java
  • 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析

    转载至:https://blog.csdn.net/wo541075754/article/details/75004575

    3.2.4 KieServices

    该接口提供了很多方法,可以通过这些方法访问KIE关于构建和运行的相关对象,比如说可以获取KieContainer,利用KieContainer来访问KBase和KSession等信息;可以获取KieRepository对象,利用KieRepository来管理KieModule等。 
    KieServices就是一个中心,通过它来获取的各种对象来完成规则构建、管理和执行等操作。 
    示例demo:

    // 通过单例创建KieServices
    KieServices kieServices = KieServices.Factory.get();
    // 获取KieContainer
    KieContainer kieContainer = kieServices.getKieClasspathContainer();
    // 获取KieRepository
    KieRepository kieRepository = kieServices.getRepository();
    View Code

    3.2.5 KieContainer

    可以理解KieContainer就是一个KieBase的容器。提供了获取KieBase的方法和创建KieSession的方法。其中获取KieSession的方法内部依旧通过KieBase来创建KieSession。

    // 通过单例创建KieServices
    KieServices kieServices = KieServices.Factory.get();
    // 获取KieContainer
    KieContainer kieContainer = kieServices.getKieClasspathContainer();
    
    // 获取KieBase
    KieBase kieBase = kieContainer.getKieBase();
    // 创建KieSession
    KieSession kieSession = kieContainer.newKieSession("session-name");
    View Code

    3.2.6 KieBase

    KieBase就是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession。

    // 获取KieBase
    KieBase kieBase = kieContainer.getKieBase();
    KieSession kieSession = kieBase.newKieSession();
    StatelessKieSession statelessKieSession = kieBase.newStatelessKieSession();
    View Code

    3.2.7 KieSession

    KieSession就是一个跟Drools引擎打交道的会话,其基于KieBase创建,它会包含运行时数据,包含“事实Fact”,并对运行时数据实时进行规则运算。通过KieContainer创建KieSession是一种较为方便的做法,其本质上是从KieBase中创建出来的。KieSession就是应用程序跟规则引擎进行交互的会话通道。 
    创建KieBase是一个成本非常高的事情,KieBase会建立知识(规则、流程)仓库,而创建KieSession则是一个成本非常低的事情,所以KieBase会建立缓存,而KieSession则不必。 

    3.2.8 KieRepository

    KieRepository是一个单例对象,它是存放KieModule的仓库,KieModule由kmodule.xml文件定义(当然不仅仅只是用它来定义)。

    / 通过单例创建KieServices
    KieServices kieServices = KieServices.Factory.get();
    // 获取KieRepository
    KieRepository kieRepository = kieServices.getRepository();
    View Code

    3.2.9 KieProject

    KieContainer通过KieProject来初始化、构造KieModule,并将KieModule存放到KieRepository中,然后KieContainer可以通过KieProject来查找KieModule定义的信息,并根据这些信息构造KieBase和KieSession。

    3.2.10 ClasspathKieProject

    ClasspathKieProject实现了KieProject接口,它提供了根据类路径中的META-INF/kmodule.xml文件构造KieModule的能力,是基于Maven构造Drools组件的基本保障之一。意味着只要按照前面提到过的Maven工程结构组织我们的规则文件或流程文件,只用很少的代码完成模型的加载和构建。

    3.2.11 kmodule.xml

    kmodule的简单配置规则在上面的实例中已经简单介绍,下面具体介绍具体的配置。

    kbase的属性:

    属性名默认值合法的值描述
    name none any KieBase的名称,这个属性是强制的,必须设置。
    includes none 逗号分隔的KieBase名称列表 意味着本KieBase将会包含所有include的KieBase的rule、process定义制品文件。非强制属性。
    packages all 逗号分隔的字符串列表 默认情况下将包含resources目录下面(子目录)的所有规则文件。也可以指定具体目录下面的规则文件,通过逗号可以包含多个目录下的文件。
    default false true, false 表示当前KieBase是不是默认的,如果是默认的话,不用名称就可以查找到该KieBase,但是每一个module最多只能有一个KieBase。
    equalsBehavior identity identity,equality 顾名思义就是定义“equals”(等于)的行为,这个equals是针对Fact(事实)的,当插入一个Fact到Working Memory中的时候,Drools引擎会检查该Fact是否已经存在,如果存在的话就使用已有的FactHandle,否则就创建新的。而判断Fact是否存在的依据通过该属性定义的方式来进行的:设置成 identity,就是判断对象是否存在,可以理解为用==判断,看是否是同一个对象; 如果该属性设置成 equality的话,就是通过Fact对象的equals方法来判断。
    eventProcessingMode cloud cloud, stream 当以云模式编译时,KieBase将事件视为正常事实,而在流模式下允许对其进行时间推理。
    declarativeAgenda disabled disabled,enabled 这是一个高级功能开关,打开后规则将可以控制一些规则的执行与否。

    
    

    ksession的属性:

    属性名默认值合法的值描述
    name none any KieSession的名称,该值必须唯一,也是强制的,必须设置。
    type stateful stateful, stateless 定义该session到底是有状态(stateful)的还是无状态(stateless)的,有状态的session可以利用Working Memory执行多次,而无状态的则只能执行一次。
    default false true, false 定义该session是否是默认的,如果是默认的话则可以不用通过session的name来创建session,在同一个module中最多只能有一个默认的session。
    clockType realtime realtime,pseudo 定义时钟类型,用在事件处理上面,在复合事件处理上会用到,其中realtime表示用的是系统时钟,而pseudo则是用在单元测试时模拟用的。
    beliefSystem simple simple,defeasible, jtms 定义KieSession使用的belief System的类型。


    
    
  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/9438254.html
Copyright © 2011-2022 走看看