天天看点

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

法以释放相关内存资源。

  在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"/>

继续阅读