前言

目前世面上中文的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)
以上12个依赖文件如果读者一时搜不到,不要紧我都把它们上传在此了: droos6.3.0在tomcat布署时的缺失包.zip

开始安装

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解压在当前目录

并改名成kie-drools后拷贝入tomcat的webapps目录下。

5. 修改D:\tomcat7\webapps\kie-drools\WEB-INF\classes\META-INF目录下的persistence.xml文件

把该项目原来使用的 H2Dialect改成 MySQL5Dialect

<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. tomcatconf目录下增加一个文件名为: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

并为该schema分配一个用户,该用户如果是通过远程访问mysql记得该用户要建成%(或者是username@ip地址)这样的格式,因为drools在第一次运行时会通过JPA在相应的DB内建立39张表。

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工程加载失败。

3.   \ 这个符号的前后都要有空格,同时每行启始处也有有空格,这个符号的作用是在LINUX的CONSOLE界面中一行太长了,分成多行写但可以连成一行执行的作用。

启动

在tomcat/bin目录下键入: ./catalina.sh start启动tomcat,在tomcat/logs目录下观察日志文件:

打开一个IE,输入如下地址:http://192.168.0.101:8080/kie-drools即可看到kie-drools的主界面了

KIE的使用

使用tomcat/tomcat(在tomcat-users.xml文件中配置的具有admin/analyst角色的用户即可登录)

新建一个Project

可以看到,在KIE-DROOLS里的project其实就是一个maven工程
如果在新建Project时碰到让你必须"Select a repository”,请按照下面步骤操作

在project里新建一条规则

为了练习,我们将新建一条规则,这条规则很简单:

假设有一报销流程,需要经过部门经理审批后到财务,如果员工的报销经额大于5,000那么除部门经理需要审批外还要报总经理再审批。

这是一条业务规则,假设哪天总经理说“大于5,000就要我批,我太烦了,改成大于10,000块才需要我审核吧”,想一下我们传统的做法。

利用KIE-DROOLS书写规则-建立因子

该规则涉及到一个公式 money>X
该规则涉及到一个因子,money

按照上述思想,我们先建立因子

这个Data Object就是因子
你可以在eclipse里把这个POJO写好后直接复制到KIE-DROOLS的Data Object编辑界面中去:
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;
}
}

不要忘了点”SAVE“按钮。

利用KIE-DROOLS书写规则-规则

规则内容如下:
package org.sky.threshholdrulz;no-looprule "approval decision by general manager"whenm : PaymentInfo( moneyAmount>5000 );thenmodify (m) { setDecisionPath("GM") };
endrule "approval decision by manager"whenm : PaymentInfo( moneyAmount<=5000 );thenmodify (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程序调用规则-规则存本地

结束本次教程

后面的教程会讲述如何把.drools文件建到我们自己搭建的kie-drools workbench 6.3.0.Final上,然后用JAVA代码远程访问的内容,这块内容目前在国内的博文和论坛中几乎无资料,笔者也是通过看源码和看官方文档后总结出来的。
其远程访问共分为两种:stateful(有状态)和stateless(无状态)2种,文中也会给出相应的对比和讲解。

jboss规则引擎KIE Drools 6.3.0 Final 教程(1)相关推荐

  1. jboss规则引擎KIE Drools 6.3.0 Final 教程(2)

    使用JAVA程序调用规则-运行KIE-DROOLS上的规则 第一步:建立一个MAVEN的Java工程 POM.XML 给出pom.xml文件 <project xmlns="http: ...

  2. 规则引擎之Drools

    规则引擎之Drools Drools概述 规则引擎构成 规则文件构成 规则体语法结构 规则属性 比较操作符 Pattern模式匹配 执行指定规则 Drools内置方法 Drools的基本使用 添加依赖 ...

  3. 作为JBoss AS 7模块运行Drools 5.4.0 Final

    Drools 5引入了业务逻辑集成平台,该平台为规则,工作流和事件处理提供了统一的集成平台. 它是从头开始设计的,因此每个方面都是一流的公民,毫不妥协. Drools 5已分为4个主要子项目: Dro ...

  4. Drools 6.5.0.Final提供

    最新版本和最出色的Drools 6.5.0.Final版本现已可供下载. 这是我们先前构建的增量版本,重点是对6.x系列进行一些重要的改进. 您可以在此处找到更多详细信息,下载和文档: Drools网 ...

  5. Drools 6.4.0.Final提供

    最新和最出色的Drools 6.4.0.Final版本现已可供下载. 这是我们先前构建的增量版本,对核心引擎和Web工作台进行了一些改进. 您可以在此处找到更多详细信息,下载和文档: Drools网站 ...

  6. Drools 6.2.0.Final发布

    我们很高兴宣布最新,最出色的Drools 6.2.0.Final版本. 特别是此发行版更加注重改进的可用性和功能,这些功能使项目更易于使用(和采用). 新功能包括对工作台UI的大量改进,对社交活动和插 ...

  7. drools 7.11.0.Final使用

    1.前提 入门java程序:https://blog.csdn.net/qq_21383435/article/details/82860461 界面配置:https://blog.csdn.net/ ...

  8. mac下workbench轻松搭建(drools 7.11.0.Final版本)

    简介:workbench轻松搭建,就是搭建drools的页面环境.Drools Workbench是管理Drools和jBPM资产的Web应用程序和存储库. 1. 所需环境 1. windows操作系 ...

  9. 规则引擎JBoss Drools简介

    一.简介 项目官网:Drools - Drools - Business Rules Management System (Java™, Open Source) 源码:GitHub - kiegro ...

最新文章

  1. docker初体验:docker部署nginx负载均衡集群
  2. nGrinder中快速编写groovy脚本03-在GET请求中发送参数
  3. python3在线手册_Python 3 手册
  4. 面试命中率 90% 的点 :MySQL 锁
  5. Python连接MySQL数据库执行sql语句时的参数问题
  6. 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和集合B的差集(近由在A中出现而不再B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
  7. C语言带参宏定义和函数的区别
  8. 焦作师范高等专科学校计算机,焦作师范高等专科学校计算机房管理规定
  9. 构建第一个Spring Boot2.0应用之项目创建(一)
  10. Python数据结构中包含中文时在Windows下正常输出
  11. Flash对联广告及关闭按钮的制作
  12. 2022年上半年网络工程师下午真题及答案
  13. 设计一个序列信号发生器, 产生序列信号1011101. 用74LS161和4选1数据选择器74153及必要的门电路实现
  14. w7系统里没有iis信息服务器,win7系统控制面板的管理选项没有“internet信息服务(IIS)管理器”的解决方法...
  15. Hadoop “Hello World” 示例
  16. 最全面的Fiddler界面讲解#工作原理#菜单栏#工具栏#底部状态栏#底部自带命令行控制台#session栏#request栏和response栏
  17. 高校最美图书馆!飘在水上?
  18. 让站长崩溃的骚操作,你中过招吗?
  19. Mac 下使用apt-get
  20. 把多个txt文件合成一个txt文件

热门文章

  1. DBA日记:上海的RAC宕机
  2. SpringMVC事务回滚
  3. 开源网安与航天网信达成战略合作,共建大湾区城市供应链平台
  4. 等保备案是等保测评吗?两者是什么关系?
  5. 如何实时、高效地处理如此海量的路况数据?
  6. 不仅仅是营收170亿这么简单 腾讯云已经成为一切业务的基础
  7. 京东图片搜索API接口-(item_search_img-按图搜索京东商品API接口),以图搜商品接口
  8. SQL将查询结果合并到一个字段中并使用,分割,不使用GROUP_CONCAT和FOR XML PATH(‘‘)与存储过程
  9. TensorFlow 加载多个模型的方法 - 知乎 https://zhuanlan.zhihu.com/p/53642222
  10. oracle tpch建表语句,IQ性能调优示例——执行TPCH查询IQ与Oracle的比较(1)