drools mysql_drools 介绍

drools mysql_drools 介绍前言目前世面上中文的 KIEDROOLSWor JBOSSBRMS 的教程几乎没有 有的也只有灵灵碎碎的使用机器来翻译的 翻的不知所云 或者是基于老版本的 JBOSSGuvnor 即 5 x 的一些教程 而且这些教程都是 缺胳膊少腿 的 初学者看后不知道它到底在干吗 能干吗 能够解决自己系统中什么问题 所以笔者自己写了几个例子 把整个最新的英文版的 KIEDROOLS6 3 0 Fin

前言

目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5.x的一些教程,而且这些教程都是”缺胳膊少腿“的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题。

所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final的官方教程给串了起来,用于供读者使用并以此来作为入门以及相关SOA理念的推广的第一步。

本教程共分为”三“集。

什么是规则引擎

88078762_1

88078762_2

规则是让业务人士驱动整个企业过程的最佳实践

88078762_3

业务规则在实现上的矛盾

88078762_4

业务规则技术

88078762_5

引入业务规则技术的目的

对系统的使用人员把业务策略(规则)的创建、修改和维护的权利交给业务经理

提高业务灵活性

加强业务处理的透明度,业务规则可以被管理

减少对IT人员的依赖程度

避免将来升级的风险对IT开发人员简化系统架构,优化应用

提高系统的可维护性和维护成本

方便系统的整合

减少编写“硬代码”业务规则的成本和风险

何为规则引擎

可以将一个或多个的事实映射到一个或多个规则上

接受数据输入,解释业务规则,并根据业务规则做出业务决策

一个简单的例子

88078762_6

从IT技术人员的角度看为什么使用规则引擎?

从应用逻辑和数据中将业务逻辑分离

简单! -规则有一个非常简单的结构

让业务用户开发和维护规则以降低成本

声明式编程

性能和可伸缩性

解决复杂的和复合的问题,其中有大量细粒度的规则和事实互动

DEMO-人寿新卓越变额万能寿险投保规则

88078762_7

DEMO-人寿新卓越变额万能寿险投保规则的IT实现

免体检累积最高限额表在规则引擎中的实现:

88078762_8

什么叫BRMS

什么是BRMS-考虑两个问题(IT管理者角度)

88078762_9

什么是BRMS-考虑两个问题(开发人员易用性角度)

88078762_10

BRMS-Business Rules Management System

88078762_11

一个优秀的BRMS应该具有的特点

88078762_12

BRMS中两个重要的概念:因子、公式

88078762_13

从业务的角度看因子与公式间的关系

88078762_14

从IT的角度看因子与公式间的关系

88078762_15

基于BRMS的系统逻辑架构

这个逻辑图有点复杂,很多人看了都会感觉“不知所云”,OK,不急!我们在后文中会来“回溯”它。

88078762_16

JBOSS Drools & Guvnor

世面上成熟的规则引擎有很多,著名的如:IBM 的iLog,pegga rulz(飞马),我们在这边要介绍的也是开源中最著名的jboss rulz。

Jboss Rulz最早是只有基于.drools的规则文件的一个内嵌式规则引擎,后来它发展成了“规则管理系统”即BRMS,它的BRMS被称为Guvnor。后来在JBOSS Guvnor5.x后它又改名叫”KIE Drools WorkBench“。

88078762_17

88078762_18

目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老板的JBOSS Guvnor即5.x的一些教程,而且这些教程都是”缺胳膊少腿“的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题。

所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final给串了起来,用于供读者使用并以此来作为入门SOA理念的推广的第一步。

Guvnor核心功能-最好的开源规则引擎

88078762_19

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目录下

88078762_20

2. 打开eclipse后按照Help->install new software输入以下地址

http://download.jboss.org/drools/release/6.3.0.Final/org.drools.updatesite/

88078762_23

3. 把drools-distribution-6.3.0.Final.zip解压在当前目录

88078762_24

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文件

88078762_25

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

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

增加如下内容:

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

增加如下内容:

记得一定要在上部加入

10. 在tomcat的conf目录下修改tomcat-users.xml

增加如下内容:

该用户用于访问drools kie

11. 在mysql中建立一个schema,名为drools

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

88078762_26

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目录下观察日志文件:

88078762_27

KIE的使用

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

88078762_28

新建一个Project

88078762_29

88078762_30

可以看到,在KIE-DROOLS里的project其实就是一个maven工程

如果在新建Project时碰到让你必须”Select a repository”,请按照下面步骤操作

88078762_31

88078762_32

在project里新建一条规则

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

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

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

88078762_33

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

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

该规则涉及到一个因子,money

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

88078762_34

这个Data Object就是因子

88078762_35

你可以在eclipse里把这个POJO写好后直接复制到KIE-DROOLS的Data Object编辑界面中去:

packageorg.sky.threshholdrulz;

publicclassPaymentInfoimplementsjava.io.Serializable {

staticfinallongserialVersionUID = 1L;

publicPaymentInfo() {

}

privateintmoneyAmount =0;

privateString decisionPath =””;

publicvoidsetMoneyAmount(intamount) {

this.moneyAmount = amount;

}

publicintgetMoneyAmount() {

returnthis.moneyAmount;

}

publicvoidsetDecisionPath(String path) {

this.decisionPath = path;

}

publicString getDecisionPath() {

returnthis.decisionPath;

}

}

88078762_36

不要忘了点”SAVE“按钮。

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

88078762_37

规则内容如下:

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”。

88078762_38

利用KIE-DROOLS书写规则-向导式的Test Scenario

88078762_39

利用KIE-DROOLS书写规则-给测试用例创建数据

88078762_40

88078762_41

88078762_42

88078762_43

利用KIE-DROOLS书写规则-运行测试

88078762_44

使用JAVA程序调用规则-规则存本地

88078762_45

88078762_46

88078762_47

88078762_48

88078762_49

结束本次教程

后面的教程会讲述如何把.drools文件建到我们自己搭建的kie-drools workbench 6.3.0.Final上,然后用JAVA代码远程访问的内容,这块内容目前在国内的博文和论坛中几乎无资料,笔者也是通过看源码和看官方文档后总结出来的。

其远程访问共分为两种:stateful(有状态)和stateless(无状态)2种,文中也会给出相应的对比和讲解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209643.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:45
下一篇 2026年3月19日 上午8:46


相关推荐

  • 单例模式singleton_单例模式详解

    单例模式singleton_单例模式详解单例模式 Singleton动机模式定义实例结构要点总结笔记动机在软件系统中,经常有一些特殊的类,必须保证它们在系统中只存在一个实例,才能保证他们的逻辑正确性、以及良好的效率如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?模式定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。实例单例class Singleton{private : Singleton(); Singleton(const Singleton& other);public:

    2022年8月11日
    6
  • setfacl 命令[通俗易懂]

    setfacl 命令[通俗易懂]setfacl命令是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。选项-b,–remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。-k,–remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。-n,–no-mask:不要重新计算有效权限。setfacl…

    2022年6月16日
    57
  • cocoapods最新版本_cocoapods使用

    cocoapods最新版本_cocoapods使用CocoaPods简介CocoaPods负责管理iOS项目中第三方框架。CocoaPods的项目源码在Github上管理。项目从2011年8月12日开始,CocoaPods的出现使得我们可以节省设置和更新第三方开源库的时间。(练习时为了速度一般我都是直接导入工程中,个人比较讨厌写纯代码在Podfile文件中)开始安装安装需要用到Ruby,虽然Mac自带了Ruby,不过版本有点老了,最好更新一…

    2025年5月23日
    2
  • 最近公共祖先详解_共同祖先

    最近公共祖先详解_共同祖先最近公共祖先带查询的节点为x和y节点,书的深度为d暴力求解:设置访问数组vis[N],以此遍历x的父节点并做标记,然后再遍历y的父节点,第一个被做标记的就是公共祖先,时间复杂度为O(d)倍增法:f[i][j]代表当前节点向上走2j2^j2j所能走到的节点,其中0≤j≤⌈log(d)⌉0\leq j \leq \lceil log(d) \rceil0≤j≤⌈log(d)⌉,时间复杂度为O(logn),另外还需要设置dist[N]代表节点i到根的距离+1,哨兵:如果从i开始跳2j2^j2j步会跳过根节

    2022年8月8日
    8
  • javaScript split 按空格和换行切割

    javaScript split 按空格和换行切割input str split s n 用正则表达式 网上搜了一大圈才找到线索

    2026年3月18日
    2
  • Midjourney+PS教程:手把手教你把AI生成的图调得超绝了

    Midjourney+PS教程:手把手教你把AI生成的图调得超绝了

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号