目录
规则引擎Drools入门
前言
初次接触规则引擎,是由于项目的需要进行了学习与开发应用。
废话不多说直接进入今天的主题Drools规则引擎入门。
是什么?为什么?怎么办?一直是学术界入门需要了解的地方。今天就从三个方面对Drools规则引擎进行描述与说明。
1.是什么(Drools东东)
Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。
*名词描述:
(1)Charles Forgy的RETE——Rete算法是Charles Forgy在1979年的论文中首次提出的,针对基于规则知识表现的模式匹配算法。
(2)OO接口——OO(Object Oriented,面向对象)接口
(3)Rete算法——是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete是拉丁文,对应英文是net,也就是网络。Rete算法通过形成一个rete网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy)和结构相似性(structural similarity),提高系统模式匹配效率。
2.为什么(要使用Drools)
软件开发工程师在实现需求时。使用的方法为程序实现方法,结果造成了业务的规则完成取决于软件工程师对需求的了解。
缺点:1.软件不灵活。2.变化基于代码。3.业务人员与开发人员PK
基于以上三个问题出现了声明性的编译方式。
优点:1.开发者实现功能即可(无需关注业务的规则)。2.规则的变化具体了一定的灵活性。3.规则的制定依赖了业务人员(同1业务决策与开发者无关性)
3.怎么做(来使用Drools)
了解Drools核心组件
pom.xml引入
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.13.0.Final</version>
</dependency>
1.KieServices是整个规则引擎的中心,提供规则构建、管理、执行等操作。
// 通过单例创建KieServices
KieServices kieServices = KieServices.Factory.get();
2.KieContainer是一个KieBase的容器。提供了获取KieBase的方法。创建KieSession的方法。
// 获取KieContainer
KieContainer kieContainer = kieServices.getKieClasspathContainer();
3.KieRepository是一个单例对象,它是存放KieModule的仓库,KieModule由kmodule.xml(后期会专门来进行xml文件的描述的一篇)文件定义。KieModule就是一个个kmodule.xml文件
// 获取KieRepository
KieRepository kieRepository = kieServices.getRepository();
4.KieBase是一个知识仓库,包含了若干的规则、流程、方法等。包括rules,processes,functions和type models。
// 获取KieBase
KieBase kieBase = kieContainer.getKieBase();
5.KieSession是与Drools引擎交互的会话,其基于KieBase创建,它会包含运行时数据,包含“事实Fact”,并对运行时数据实时进行规则运算。Fact就是参与规则的对象。fireAllRules方法进行规则的执行
// 获取KieSession
KieSession kieSession = kieBase.newKieSession();
具体Drools使用将在下一节Drools使用讲到