drools原生drl规则文件的使用

初识drools中对drl文件进行了简单的介绍。这里举个例子来具体说明下。主要是写了规则以后咱们如何用java代码来run起来。java

drl文件内容以下:api


rule "ageUp12" when
 $student: Student(age > 2)
then
 $student.ageUp12();
end

rule "nameMax" when
 $student: Student(name == "max")
then
 $student.nameMax();
retract($student);
end

rule "class" when
 $student:Student()
then
 $student.toString();
retract($student);
end

rule "testList" when
 $student : Student($age : age)
not Student(age < $age)
then
 System.out.println("age = " + $age);
retract($student);//这里致使了LHS的变化 而后会从新触发规则的匹配慎用 这里只是为了展现排序的例子,而后这个rule能够排序。。。。
 end

咱们在文件中import了一个Student类,代码很简单,就是一个javaBean,里面有两个字段:int age和String name;而后还有几个方法,ageUp12(),nameMax()post

而后咱们怎么把这个文件和java代码关联起来呢,直接上代码ui

KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//ResourceFactroy是个获取各类资源的工厂,好比newUrlResource,这里ResourceType指明了规则文件的类型,里面有咱们在决策表中用到的xls哦
knowledgeBuilder.add(ResourceFactory.newClassPathResource("drools/mydrools.drl"), ResourceType.DRL);
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());
StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession();
Student student = new Student(13,"max");
Student student1 = new Student(11,"max");
knowledgeSession.insert(student);//具体的java类对象添加到workingMemory中。
knowledgeSession.insert(student1);
knowledgeSession.fireAllRules();

 

在这段代码里咱们看到 最后真正去执行的是一个叫作knowledgeSession的东西,这是一个会话,实现了KieSession接口,这个接口的实现类自己包含数据,规则而且执行真正的操做。在规则表里面还会提到。orm

而后前面咱们构造了一个KnowledgeBuilder,来把规则文件加载到drools里,而后构造了一个KnowledgeBase,并从这个KnowlegeBase中获取一个实际操做的会话。对象

这里对这几个class作一下简单介绍:排序

KnowledgeBuilder主要是加载规则文件到drools规则引擎中,用于根据规则引擎文件来构造知识仓库。

KnowledgeBase是对一个规则文件的抽象,能够看下他的父类接口KieBase,在英文文档中是这么介绍的:KieBase就是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase自己并不包含运行时的数据之类的,若是须要执行规则KieBase中的规则的话,就须要根据KieBase建立KieSession接口

StatefulKnowledgeSession是一个KieSession实现类,这个接口在英文文档中是这么介绍的:KieSession就是一个跟Drools引擎打交道的会话,其基于KieBase建立,它会包含运行时数据,包含“事实 Fact”,并对运行时数据事实进行规则运算

注:这里用到的几个class都是kie-api中的类,这个api在drools中的做用很是之重要,咱们在前面的博客里已经有所讲解。并且也是决策表中的主要组件。资源

 

 

 

 
 
编写评论...
相关文章
相关标签/搜索