生成drl文件_drools原生drl规则文件的使用

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

drl文件内容如下:

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()

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

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接口,这个接口的实现类本身包含数据,规则并且执行真正的操作。在规则表里面还会提到。

然后前面我们构造了一个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中的作用非常之重要,我们在前面的博客里已经有所讲解。而且也是决策表中的主要组件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值