Drools的目的?
drools 编写规则的目的就是 为了 把复杂的,容易变动的业务逻辑和 不容变动的数据分开,为了实现可以随时灵活的改动业务逻辑而不用重新部署启动项目,为了以后的开发人员和产品人员可以更好的理解复杂的业务逻辑。
Drools workbench的作用
我们首先学习一些基本的drools语法,写出了一些规则文件,也可以正常的运行,那么这个workbench到底有什么用呢?不可能希望业务人员去开发工具里写规则,那么这就是个平台,6.4后叫 business center, 可以在上面对规则CRUD 高级规则模式:决策表 规则流,JBPM规则定义 部署规则包定义
分工
drools workbench组织业务逻辑,所有的规则都放在drools workbench中编写,管理;
代码中来整合数据,执行drools workbench中的规则。
合作
分工后是如何通信的?
1. 首先drools workbench中要写业务规则,那就需要实体类,否则就没有写业务的对象了。
做法:把ofbiz.jar 导入到workbench 的仓库中作为资源,在项目中引用。如果有更新,重新导入,填写一样的groupId,artifactId,version 会覆盖之前上传的。项目不用重新构建。
2. 第二,在代码中,如何执行规则,并且执行到的永远是最新的。
新建项目的时候,版本填写为1.0-SNAPSHOT形式,这样,每次build会生成新的文件,形式为 AllotCustomer-1.0-20170727.024026-1.jar;
通过访问 workbench中的发布资源,就可以访问到最新的资源
String url = "https://localhost:8443/drools-wb/maven2/"+groupId.replace(".", "/")+"/"+artifactId+"/"+version+"/"+artifactId+"-"+version+".jar";
复制代码
代码 详情见工具类 KnowledgeSessionHelper
在drools模块里写了工具类来获取KieContainer 和kieSession, kieContainer 是用来从classpath中读取文件结构的,kieSession是 运行时的上下文
KnowledgeSessionHelper 里 createRuleBase 方法,获取 kieContainer
KnowledgeSessionHelper 里 getStatefulKnowledgeSesssion 方法 ,获取kieSession
复制代码
规则的执行
![1](F:/xkl/Downloads/drools使用 – Customer Engagement Center_files/1.png)如何组合些的多个规则呢
-
级别salience 越高,越先执行。
-
规则流
需要注意的
1.规则不可以做间接的修改,Message中有partyInfos ,你要是改里面的partyInfo里的值,不会成功。
2.在操作中修改了条件中值,要注意下次判断是否准确。
3.操作中修改了一个fact的值之后,如果修改的值出现在了条件中,再次满足,会再次循环,可以加上属性用no-loop true 不允许多次执行