jboss规则引擎KIE Drools 6.3.0 Final 教程(1)
前言
目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5.x的一些教程,而且这些教程都是”缺胳膊少腿“的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题。
所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final的官方教程给串了起来,用于供读者使用并以此来作为入门以及相关SOA理念的推广的第一步。
本教程共分为”三“集。
什么是规则引擎
规则是让业务人士驱动整个企业过程的最佳实践
业务规则在实现上的矛盾
业务规则技术
引入业务规则技术的目的
对系统的使用人员
- 把业务策略(规则)的创建、修改和维护的权利交给业务经理
- 提高业务灵活性
- 加强业务处理的透明度,业务规则可以被管理
- 减少对IT人员的依赖程度
- 避免将来升级的风险
对IT开发人员
- 简化系统架构,优化应用
- 提高系统的可维护性和维护成本
- 方便系统的整合
- 减少编写“硬代码”业务规则的成本和风险
何为规则引擎
- 可以将一个或多个的事实映射到一个或多个规则上
- 接受数据输入,解释业务规则,并根据业务规则做出业务决策
一个简单的例子
从IT技术人员的角度看为什么使用规则引擎?
- 从应用逻辑和数据中将业务逻辑分离
- 简单! -规则有一个非常简单的结构
- 让业务用户开发和维护规则以降低成本
- 声明式编程
- 性能和可伸缩性
- 解决复杂的和复合的问题,其中有大量细粒度的规则和事实互动
DEMO-人寿新卓越变额万能寿险投保规则
DEMO-人寿新卓越变额万能寿险投保规则的IT实现
免体检累积最高限额表在规则引擎中的实现:
什么叫BRMS
什么是BRMS-考虑两个问题(IT管理者角度)
什么是BRMS-考虑两个问题(开发人员易用性角度)
BRMS-Business Rules Management System
一个优秀的BRMS应该具有的特点
BRMS中两个重要的概念:因子、公式
从业务的角度看因子与公式间的关系
从IT的角度看因子与公式间的关系
基于BRMS的系统逻辑架构
这个逻辑图有点复杂,很多人看了都会感觉“不知所云”,OK,不急!我们在后文中会来“回溯”它。
JBOSS Drools & Guvnor
世面上成熟的规则引擎有很多,著名的如:IBM 的iLog,pegga rulz(飞马),我们在这边要介绍的也是开源中最著名的jboss rulz。
Jboss Rulz最早是只有基于.drools的规则文件的一个内嵌式规则引擎,后来它发展成了“规则管理系统”即BRMS,它的BRMS被称为Guvnor。后来在JBOSS Guvnor5.x后它又改名叫"KIE Drools WorkBench“。
目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老板的JBOSS Guvnor即5.x的一些教程,而且这些教程都是”缺胳膊少腿“的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题。
所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final给串了起来,用于供读者使用并以此来作为入门SOA理念的推广的第一步。
Guvnor核心功能-最好的开源规则引擎
KIE Drools6.3.0.Final的安装与使用
准备安装文件与环境-环境
- CentOS 6
- mysql5.5.x or above
- apache-tomcat-7.0.67.zip(Tomcat7.0.4 or above)
这些环境,读者应该自己会安装了。
准备安装文件与环境-必须软件
- kie-drools-wb-6.3.0.Final-tomcat7.war
- drools-distribution-6.3.0.Final.zip
- 给Tomcat7的lib目录下用的jar文件,其中包括:
jboss-jacc-api_1.4_spec-1.0.3.Final.jar |
kie-tomcat-integration-6.3.0.Final.jar |
slf4j-log4j12-1.7.7.jar |
log4j-core-2.1.jar |
log4j-api-2.1.jar |
log4j-slf4j-impl-2.1.jar |
slf4j-api-1.7.7.jar |
javax.security.jacc-api-1.5-javadoc.jar |
btm-2.1.4.jar |
btm-tomcat55-lifecycle-2.1.4.jar |
jta-1.1.jar |
数据库驱动(mysql-connector-java-5.1.38.jar) |
开始安装
1. 把下列文件全部copy至tomcat的lib目录下
2. 打开eclipse后按照Help->install new software输入以下地址
http://download.jboss.org/drools/release/6.3.0.Final/org.drools.updatesite/
3. 把drools-distribution-6.3.0.Final.zip解压在当前目录
4. 把kie-drools-wb-6.3.0.Final-tomcat7.war解压在当前目录
5. 修改D:\tomcat7\webapps\kie-drools\WEB-INF\classes\META-INF目录下的persistence.xml文件
<properties>
<!--property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
<!-- BZ 841786: AS7/EAP 6/Hib 4 uses new (sequence) generators which seem to cause problems -->
<property name="hibernate.id.new_generator_mappings" value="false"/>
</properties>
6. 在tomcat的conf目录下增加一个文件名为:btm-config.properties的文件
bitronix.tm.serverId=tomcat-btm-node0
bitronix.tm.journal.disk.logPart1Filename=${btm.root}/work/btm1.tlog
bitronix.tm.journal.disk.logPart2Filename=${btm.root}/work/btm2.tlog
bitronix.tm.resource.configuration=${btm.root}/conf/resources.properties
7. 在tomcat的conf目录下增加一个文件名为:resources.properties的文件
resource.ds1.className=bitronix.tm.resource.jdbc.lrc.LrcXADataSource
resource.ds1.uniqueName=jdbc/jbpm
resource.ds1.minPoolSize=10
resource.ds1.maxPoolSize=20
resource.ds1.driverProperties.driverClassName=com.mysql.jdbc.Driver
resource.ds1.driverProperties.url=jdbc:mysql://192.168.0.101:3306/drools?useUnicode=true&characterEncoding=UTF-8
resource.ds1.driverProperties.user=kie
resource.ds1.driverProperties.password=aaaaaa
resource.ds1.allowLocalTransactions=true
8. 在tomcat的conf目录下修改context.xml
<Resource name="jdbc/jbpm" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.101:3306/drools?useUnicode=true&characterEncoding=UTF-8"
username="kie"
password="aaaaaa"
maxActive="20"
maxIdle="1"
maxWait="5000" />
9. 在tomcat的conf目录下修改server.xml
增加如下内容:
<Valve className="org.kie.integration.tomcat.JACCValve" />
记得一定要在</host>上部加入
10. 在tomcat的conf目录下修改tomcat-users.xml
<user username="tomcat" password="tomcat" roles="admin,manager,manager-gui"/>
该用户用于访问drools kie
11. 在mysql中建立一个schema,名为drools
12. 修改tomcat目录bin下的catalina.sh文件
export CATALINA_HOME="/opt/tomcat1"
export CATALINA_OPTS="-Dbtm.root=$CATALINA_HOME \
-Dbitronix.tm.configuration=$CATALINA_HOME/conf/btm-config.properties \
-Djbpm.tsr.jndi.lookup=java:comp/env/TransactionSynchronizationRegistry \
-Djava.security.auth.login.config=$CATALINA_HOME/webapps/kie-drools/WEB-INF/classes/login.config \
-Dorg.jboss.logging.provider=jdk"
export JAVA_OPTS="-d64 -server -showversion -Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:CICompilerCount=8 -XX:+UseCompressedOops -XX:-DontCompileHugeMethods -Xss256k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:MaxTenuringThreshold=31 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -Djava.awt.headless=true -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:MaxGCPauseMillis=200 -Dorg.kie.demo=false"
1. 此处我的tomcat是放在CentOS的/opt/tomcat1下的,因此我的CATALINA_HOME的设置要换成你的tomcat所在的路径
2. 参数 –Dorg.kie.demo=false的作用是在无互联网环境下去运行kie-drools时,如果不加此参数kie-drools会在每次运行时去GIT试图加载kie-drools的demo,如果你的服务器为虚拟机或者是无互联网环境时它会因为建立internet连接超时而抛出一个疑似memory leak的exception而导致整个war工程加载失败。
启动
打开一个IE,输入如下地址:http://192.168.0.101:8080/kie-drools即可看到kie-drools的主界面了
KIE的使用
新建一个Project
在project里新建一条规则
假设有一报销流程,需要经过部门经理审批后到财务,如果员工的报销经额大于5,000那么除部门经理需要审批外还要报总经理再审批。
这是一条业务规则,假设哪天总经理说“大于5,000就要我批,我太烦了,改成大于10,000块才需要我审核吧”,想一下我们传统的做法。
利用KIE-DROOLS书写规则-建立因子
该规则涉及到一个因子,money
按照上述思想,我们先建立因子
package org.sky.threshholdrulz; public class PaymentInfo implements java.io.Serializable { static final long serialVersionUID = 1L; public PaymentInfo() {
} private int moneyAmount = 0;
private String decisionPath = ""; public void setMoneyAmount(int amount) {
this.moneyAmount = amount;
} public int getMoneyAmount() {
return this.moneyAmount;
} public void setDecisionPath(String path) {
this.decisionPath = path;
} public String getDecisionPath() {
return this.decisionPath;
}
}
利用KIE-DROOLS书写规则-规则
package org.sky.threshholdrulz; no-loop rule "approval decision by general manager"
when
m : PaymentInfo( moneyAmount>5000 );
then
modify (m) { setDecisionPath("GM") };
end rule "approval decision by manager"
when
m : PaymentInfo( moneyAmount<=5000 );
then
modify (m) { setDecisionPath("M") };
end
利用KIE-DROOLS书写规则-测试规则
如果PaymentInfo因子中的paymentAmount>5000,那么PaymentInfo中的decisionPath返回就是字符串“GM”。
如果PaymentInfo因子中的paymentAmount<=5000,那么PaymentInfo中的decisionPath返回就是字符串“M”。
利用KIE-DROOLS书写规则-向导式的Test Scenario
利用KIE-DROOLS书写规则-给测试用例创建数据
利用KIE-DROOLS书写规则-运行测试
使用JAVA程序调用规则-规则存本地
结束本次教程
jboss规则引擎KIE Drools 6.3.0 Final 教程(1)的更多相关文章
- jboss规则引擎KIE Drools 6.3.0 Final 教程(3)
在前2部教程中,介绍了如何在本地运行.drools文件以及使用stateless的方法访问远程repository上的规则. KIE Drools还提供了一种叫有状态-stateful的访问方式. 运 ...
- jboss规则引擎KIE Drools 6.3.0 Final 教程(2)
使用JAVA程序调用规则-运行KIE-DROOLS上的规则 第一步:建立一个MAVEN的Java工程 POM.XML 给出pom.xml文件 <project xmlns="http: ...
- Drools规则引擎
一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...
- drools规则引擎笔记(二)
规则引擎版本,drools6.5.0 final eclipse:Neon JDK1.8 今天主要是在规则的when部分加入了多个fact对象. 对于working memory存在多个fact的情形 ...
- drools规则引擎与kie-wb和kie-server远程执行规则(7.18.0.Final)
最近研究了一下规则引擎drools. 这篇博客带你搭建并运行一个可在线编辑,在线打包,远程执行的规则引擎(drools) 本篇博客同时参考https://blog.csdn.net/chinrui/a ...
- Drools 规则引擎应用
规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...
- Drools 规则引擎应用 看这一篇就够了
1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...
- JAVA规则引擎 -- Drools
Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的de ...
- eclipse下搭建Drools规则引擎环境
插件下载地址:http://download.jboss.org/drools/release/ 1.点开对应的版本文件,选择标红的两个压缩包下载,其他的如有需要也可以自行选择: 2.将下载的压缩包解 ...
随机推荐
- Docker----起步
最近学习了一下的docker相关的东西,下面介绍一下我个人的学习总结和体会.关于docker的详细介绍和优势,在网上随便都可以找得到,就不做介绍了.这个部分的内容比较简单,有Docker基础的朋友可以 ...
- java处理大文本方案
转载自:http://langgufu.iteye.com/blog/2107023 java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类, ...
- 机器学习基石:16 Three Learning Principles
三个理论上界: 三个线性模型: 三个关键工具: 三条学习规则: 1.奥卡姆剃刀定律 先从简单模型开始, 训练后出现欠拟合, 再尝试复杂点模型. 2.采样误差 训练.验证.测试数据尽量同分布. 3.数据 ...
- js高阶函数应用—函数柯里化和反柯里化(二)
第上一篇文章中我们介绍了函数柯里化,顺带提到了偏函数,接下来我们继续话题,进入今天的主题-函数的反柯里化. 在上一篇文章中柯里化函数你可能需要去敲许多代码,理解很多代码逻辑,不过这一节我们讨论的反科里 ...
- [JLOI 2012]树
Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...
- 【USACO】奶牛抗议 树状数组+dp
题目描述 约翰家的 N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛 的理智度为 A i ,数字可正可负. 约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几 ...
- Codeforces Round #438 C. Qualification Rounds
Description Snark and Philip are preparing the problemset for the upcoming pre-qualification round f ...
- 【Rain in ACStar HDU-3340】
·你正从AC星球返回,天又下起凸包雨,只好到线段树下躲雨. ·英文题,述大意: 一个竖直平面的美丽天空,会下凸包雨.凸包雨指的是边数为3~6的多边形,并且每一个它都遵守一个神奇定律,那就是 ...
- CTSC2017 铁牌记
Day 0: 先到了丽都酒店. 看见北京八十中学生在发胸牌手册和T恤,领完之后开始分房间. 我和ryc一屋,lyd和ysq一屋,yzy和gzz分到了珀利酒店,老师尝试了半天把我们分到一个酒店,失败了. ...
- 第一节mysql 安装
1 安装之前的检查 先要检查Linux系统中是否已经安装了MySQL,输入命令尝试打开MySQL服务: 输入密码后,如果出现以下提示,则说明系统中已经安装有 MySQL: 如果提示是这样的,则说明系统 ...