常用API
KIE是jBoss里面一些相关项目的统称,其中我们比较熟悉的就有jBPM和Drools
。
这些项目都有一定的关联关系,并且存在一些通用的API,比如说涉及到构建(building)、部署(deploying)和加载(loading)等;
jBoss通过KIE将jBPM和Drools等相关项目进行了一个整合,统一了他们的使用方式,提供了常见的公共API如KieServices、KieContainer、KieSession等。
通过KieServices
对象得到一个KieContainer
,利用kieContainer对象创建一个新的KieSession
,创建session的时候传入了一个name,这个就是我们定义的kmodule.xml
文件中定义的ksession的name。
kieContainer根据kmodule.xml定义的ksession的名称找到KieSession的定义,然后创建一个KieSession的实例。
KieSession就是一个到规则引擎的链接,通过它就可以跟规则引擎通讯,并且发起执行规则的操作。
通过kSession.insert方法来将事实(Fact)插入到引擎中,也就是Working Memory中。 然后通过kSession.fireAllRules方法来通知规则引擎执行规则。
KieContainer可以理解为一个KieBase的容器。
KieBase
就是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession。
调用demo
public static void main(final String[] args) {
//通过KieServices对象得到一个KieContainer,
// 利用kieContainer对象创建一个新的KieSession,创建session的时候传入了一个name,这个就是我们定义的kmodule.xml文件中定义的ksession的name。
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
System.out.println(kc.verify().getMessages().toString());
KieSession ksession = kc.newKieSession("mingKS");
XiaoMing xiaoMing = new XiaoMing();
xiaoMing.setMoney(50);
// 通过kSession.insert方法来将事实(Fact)插入到引擎中,也就是Working Memory中。 然后通过kSession.fireAllRules方法来通知规则引擎执行规则。
ksession.insert(xiaoMing);
ksession.fireAllRules();
ksession.dispose();
}
kmodule.xml
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="mingKB" packages="com.xu.drools.rule.complexProblem">
<ksession name="mingKS"/>
</kbase>
</kmodule>
依赖jar包
<drools.version>7.0.0.Final</drools.version>
<!--Drools-->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-templates</artifactId>
<version>${drools.version}</version>
</dependency>