级别: 初级 王 夕宁, 软件工程师, IBM 中国软件开发实验室 SOA设计中心
2007 年 6 月 28 日 本文从介绍面向服务体系结构领域中的业务规则概念出发,结合实际的应用场景,重点讲述了基于IBM业务整合旗舰产品WID和WPS如何实现业务规则逻辑的灵活应用。文章中结合实际的应用经验给出了关于选择规则集还是决策表的最佳实践。接着,讲述了WPS中的一个重要插件工具----业务规则管理器----的实现机制。业务规则管理器通过基于Web界面的方式让用户可以方便地管理规则逻辑,从而能够灵活地定制业务策略来满足随需应变的业务需求。文章中详细讲述了如何基于WPS安装配置业务规则管理器,如何使用管理器导出规则组,以及如何基于该管理器实现对业务规则逻辑的定制管理等。
1.业务规则相关概念
讲述如何在面向服务体系结构SOA中应用业务规则之前,澄清一些容易混淆的概念是有必要的。这是因为在实际的应用中,很多业务人员和IT技术人员常常把业务策略(Business Policy)和业务规则(Business Rule)等同或混淆。
业务策略(Business Policy)
其实,业务策略本身只是一种声明,通常以自然语言来编写。例如,“供应商给予金牌客户最优惠的折扣为70%。”对于有效的业务策略而言,其实现必须提供适当的实施点。
业务规则(Business Rule)
业务规则则是强制性的,并且逻辑上是可执行的;规则是实现策略实施点的有效方式。一个业务规则是指捕获和实现业务策略的手段和途径,它能执行策略、做出决策以及从已有的数据中推断出新的数据。
规则集(Rule Set)
顾名思义,规则集就是许多规则的集合。每条规则包含一个条件过滤器和多个动作。
条件过滤器(Condition)
一个条件过滤器可以包含多个过滤条件。条件过滤器是多个布尔表达式的组合,其组合结果仍然是一个布尔类型的。一个条件描述了某种动作触发时所处的情景或者状态,在后面的应用场景例子中,条件就是指客户本身的身份,如是金牌客户还是铜牌、银牌或普通客户。
动作(Action)
在程序运行时,动作将会在条件过滤器值为真的情况下执行。每一种动作都应当有其相应的条件,在后面的应用场景例子中,动作是指提供给客户什么样的折扣信息。不同的条件出现,就会有不同的动作被触发。
2.应用场景
接下来以供应链中一个常见的业务场景作为案例来讲述一下如何在SOA中应用业务规则。在我们的场景中,假定供应商能够根据请求客户的不同身份和状态,基于一定的业务规则,来决定应以什么样的折扣提供给客户。
如图2-1所示,描述了四种不同身份的客户,包括金牌客户、银牌客户、铜牌客户以及普通客户。客户在购买商品时,供应商会根据他们的身份和购买时间(节假日或正常工作日)分别给予不同的折扣,
例如:在正常工作日期间,给予金牌客户最优惠的折扣70%,给予银牌客户和铜牌客户的折扣分别是80%和90%,而普通用户则没有任何折扣;而在节假日期间为了提高销售量,做出了更加优惠的销售策略,
如金牌客户在消费金额超过5000元,折扣率可达45%,普通客户在消费金额超过1000元之后也会享受不同程度的优惠。
图2-1 业务场景
规则集是指一系列的按照一定顺序排列的规则集合,最常见的形式是IF-THEN规则集。IF-THEN规则集是指一系列的被顺序执行的IF-THEN条件和活动语句,
IF语句表达条件语义,THEN语句表达具体执行的动作语义。将上述正常工作日期间的业务策略表示成IF-THEN规则集,如图2-2所示。
图2-2 IF-THEN规则集
另一种常见的规则表示方式是决策表,它是指描述多维条件判断的IF-THEN结构的业务逻辑。决策表被组织成树形结构,在多个IF条件的交叉点处定义THEN活动。
与IF-THEN规则集一样,决策表也是由IF条件和THEN活动驱动的,不同之处则是指决策表的条件逻辑表现为一个表格形式,表中的行和列都代表条件语句,
行和列的交叉点处决定活动的执行。将上述节假日期间的业务策略表示成决策表,如表2-1所示。
表2-1 决策表
| 客户消费金额(元) | 0~1000 | 1000~2000 | 2000~5000 | 5000以上 |
|---|
| 金牌客户 | 七折 | 六五折 | 六折 | 五五折 |
|---|
| 银牌客户 | 八折 | 七五折 | 七折 | 六五折 |
|---|
| 铜牌客户 | 九折 | 八五折 | 八折 | 七五折 |
|---|
| 普通客户 | 无折扣 | 九五折 | 九折 | 八五折 |
|---|
3.最佳实践:选择规则集还是决策表
规则集和决策表都能够表达业务规则逻辑,那么究竟选择哪一种方式更佳呢?下面给出了几点建议供参考:
- [1] 如果要处理的条件表达式表现为大量无结构的语句,此时选择规则集作为表示方式可能更好。这是因为规则集要比更结构化的决策表显得更加灵活。
- [2] 如果每一规则近乎使用类似的决策准则,那么使用决策表是个不错的主意。
- [3] 如果业务人员在描述业务策略时,使用了EXCEL等表格方式,那么理所应当地要选择决策表来表达业务规则逻辑。
- [4] 值得一提的是,如果您设计的决策表中出现了很多空洞,那么说明使用这种方式未必是最佳方式,不妨选择规则集尝试一下。
4.基于WID开发测试业务规则组件
WID (WebSphere Integration Developer)提供了一个基于Eclipse的桌面开发工具用来创建新的业务规则或者修改已有的业务规则。
具体关于WID的信息,可以参见WID信息中心:http://publib.boulder.ibm.com/infocenter/dmndhelp/ v6rxmx/topic/com.ibm.wbit.help.nav.doc/topics/welcome.html。
如图4-1所示,WID中已安装了用于编写业务规则的Eclipse插件。
图4-1 基于Eclipse的业务规则编写插件
基于上述应用场景,基于WID进行业务规则组件的开发测试。
4.1 用户通过接口访问一个业务规则组件
业务规则组件接口定义了两个方法normalPromote和specialPromote,分别用于正常工作日和节假日的折扣处理。其中,方法normalPromote的输入和输出参数分别为string类型的客户状态(status)和double类型的折扣率(discount),方法specialPromote的输入和输出参数分别为string类型的客户状态(status)、int类型的消费金额(amount)和double类型的折扣率(discount)。
如图4-2所示。
图4-2 接口定义
4.2 创建业务规则逻辑
使用当前时间作为参数方法,业务规则组件根据当前时间选择规则逻辑:
- 当时间日期为周一至周五的时候,选择IF-THEN规则集NormalDiscountRule;基于业务规则编写插件实现该规则集,如图4-3所示。
图4-3 IF-THEN规则集
- 当时间日期为周六或周日的时候,选择决策表SpecialDiscountRule;基于业务规则编写插件实现该决策表,如图4-4所示。
图4-4 决策表
4.3 装配测试规则组件
在业务集成模块中新建一个规则组,为规则组指定前面定义的接口文件并引用前面已定义的规则逻辑。在将业务规则组件真正部署到运行服务器之前,
对其进行装配测试的过程十分必要。基于WID的装配编辑器可方便地将各个组件集成起来,装配业务规则组件的方法等同于其他类型的SCA组件。
装配之后,在WID装配编辑器中右键选中要测试的业务规则组件,选择Test Component菜单,启动集成测试客户端(Integration Test client)。
如图4-5所示,在测试决策表规则时,客户的身份为金牌客户(GOLD),购买商品金额为80000,那么供应商提供给该客户的折扣率应为0.55。
图4-5 测试规则组件
测试通过后,就可以将其部署到运行服务器WPS中。即使业务规则被部署到运行时环境中之后,也还可以对其进行修改管理。
下面的章节将讲述如何基于业务规则管理工具Business Rules Manager灵活应用业务规则逻辑。
5.基于WPS的业务规则管理器灵活应用业务逻辑
WPS(WebSphere Process Server)提供了一个基于Web界面的业务规则管理工具Business Rules Manager。
具体关于WPS的信息,可以参见 WPS信息中心。
业务规则管理器是一个基于Web技术的应用程序,跟普通的J2EE应用程序一样,需要部署在应用服务器上才能运行。
业务规则管理器通过基于Web界面的方式让用户可以方便地管理规则逻辑,从而能够灵活地定制业务策略来满足随需应变的业务需求。它提供了以下几种功能:
- 从存储器中中读取业务规则的副本
- 浏览或编辑业务规则
- 发布业务规则到存储器中
5.1 业务规则管理器的实现机制
如图5-1所示描述了业务规则管理器如何调用和发布业务规则:
- [1] 当选择一条业务规则时,业务规则管理器会从存储器中读入该记录,并把该规则的一个副本存储在服务器中内存中;
- [2] 根据业务需要,此时可以对读取的业务规则进行编辑定制;
- [3] 修改完毕,业务规则的副本会存储在业务器内存中;
- [4] 将服务器内存中的副本发布到数据库中。
图5-1 业务规则管理器的实现机制
5.2 安装配置业务规则管理器
5.2.1 安装业务规则管理器
业务规则管理器组件是WebSphere Process Server中的一个重要工具,业务人员可以使用它管理业务中的规则。
业务规则管理器组件是以插件的方式安装在WebSphere Process Server中,可以通过管理控制台安装或在Windows、Linux操作系统下使用jacl脚本安装。
使用列表5-1中的jacl脚本手动安装时,需要首先启动WebSphere Process Server,然后在WAS_HOME/bin下执行下面的脚本:
列表5-1. jacl脚本
- run shell/command prompt and change directory to WAS_HOME/bin
- run the following command with WebSphere Process Server started
Win32 : wsadmin.bat -f installBRManager.jacl -s servername
-n nodename -c cellname -r rootname
-a applicationname
Linux : /wsadmin.sh -f ./installBRManager.jacl -s servername
-n nodename -c cellname -r rootname
-a <applicationname |
执行结果如图5-2所示:
图5-2 基于脚本的安装
5.2.2 配置业务规则管理器服务器端
如果从管理控制台安装,那么需要对服务器端进行如下配置:
在创建用户时启用安全性,并把创建的用户映射到角色BusinessRuleUser,如图5-3所示。
图5-3 配置业务规则器
启用会话跟踪机制,使用cookies机制跟踪会话。如图5-4所示。
例如,设置适当的会话时间;或者根据实际情况设置是否启动安全性。
图5-4 设置业务规则器的配置参数
5.2.3 配置业务规则管理器数据库
业务规则管理器后端使用数据库存储业务规则,默认安装该组件会自动创建一个Cloudscape的实例。
如果在实际运行环境中,需要使用商业数据库(例如DB2)作为存储层,那么需要用户手工进行如下配置。
首先启动WebSphere Process Server,然后在WAS_HOME/bin下执行列表5-2的脚本:
列表5-2. 配置数据库jacl脚本
wsadmin -f configureArtifactRepository.jacl
artifactRepository.properties -profileType default |
其中,属性文件artifactRepository.properties的内容说明如表5-1所述:
表5-1 属性文件artifactRepository.properties
| 属性名 | 说明 | 例子 |
|---|
| cellName | 单元名 | cellName=T40Cell04 |
|---|
| nodeName | 节点名 | nodeName=T40CellManager04 |
|---|
| profilePath | 概要文件路径 | profilePath=install_root\profiles\profile_name |
|---|
| WBI_HOME | WebSphere Process Server安装目录 | WBI_HOME=C:\Program Files\IBM\WebSphere\ProcServer |
|---|
| WAS_HOME | WebSphere Application Server或 WebSphere Application Server Network Deployment安装目录 | WAS_HOME=C:\Program Files\IBM\WebSphere\AppServer |
|---|
| dbName | 数据库名 | dbName=WPRCSDB |
|---|
| dbType | 数据库类型 | dbType=DB2_Universal/DB2UDBOS390_V7_1/DB2UDBOS390_V8_1/DB2_CLI/CLOUDSCAPE |
|---|
| dbServerPort | 数据库端口 | dbServerPort=50000 |
|---|
| dbUserName | 数据库用户名 | dbUserName=db2admin |
|---|
| dbHostName | 数据库主机名 | dbHostName=dbserver |
|---|
| dbPassword | 数据库用户口令 | dbPassword=db2passwd |
|---|
| dbClassPath | 数据库类库路径 | dbClassPath=C:\Program Files\IBM\SQLLIB\java |
|---|
另外,也可以按下面的步骤通过管理控制台配置数据库。
- [1] 选择左边的导航栏“资源”,“JDBC提供程序”,然后点击右边页面中的新建按钮,在配置页面中选择数据库类型,例如DB2;选择提供程序类型,例如DB2 Universal JDBC Driver Provider;选择实现类型,例如连接池数据源,出现如图5-5所示的界面。
图5-5 设置业务规则器的数据源类型
- [2] 点击下一步按钮进入如图5-6的配置界面,输入JDBC提供程序的名称、描述以及类路径、本机库路径、实现类名等。点击确定按钮保存后,进入数据源配置界面。
图5-6 设置业务规则器的数据源参数
- [3] 在数据源配置界面,输入数据源名称,注意一点的是JNDI的名称,一定是jdbc/wbiserver/DynamicArtifactRepositoryDataSource,如图5-7所示。如果数据库启用了安全性要求,那么还应选择相应的组件管理的认证别名。有关数据源的配置只能请参阅其他相关文档。
图5-7 设置业务规则器的数据源JNDI等
5.2.4 配置业务规则管理器客户端
另外,还需要对客户端浏览器进行如下配置:
- 启用cookies:在使用业务规则管理器时,需要使用cookies跟踪会话,因此需要在客户端的浏览器中启用cookies功能。
- 启用浏览器的脚本功能:业务规则管理器需要启动脚本功能。
正确配置完服务器端和客户端之后,就可以使用业务规则管理器了。在浏览器中输入如下地址(端口可能根据实际情况有所变化):
https://localhost:9443/br/webclient/pages/index.jsp(启用安全性)
http://localhost:9080/br/webclient/pages/index.jsp (未启用安全性)
5.3 使用Business Rule Manager管理规则组
安装配置业务规则管理器完毕之后,查看当前运行的业务规则组件就成为管理业务规则的第一步。在管理控制台的左侧导航栏,选择“服务器”,“应用服务器”,选择服务器名进入下一页,点击“业务规则”配置项,如 图5-8所示。
图5-8 服务器中的业务规则配置
点击业务规则项下的三个子项之一“业务规则”,进入业务规则导出界面,如图5-9所示,选择要导出的业务规则组,点击“导出”按钮。
图5-9 服务器中的业务规则列表
导出的业务规则组文件为ZIP压缩文件,除了包括例子中我们已经定义的IF-THEN规则集和决策表文件外,还包括了服务器中关于该业务规则组的运行时数据文件、WPS的版本信息等,如图5-10所示。
图5-10 从服务器中导出的业务规则文件
5.3.1 创建/修改业务规则记录
登录业务规则管理器界面后,选择已存在的某一业务规则记录,点击“编辑”按钮进入可编辑状态,如图5-11所示。点击“添加选择记录”按钮,一条新的业务规则记录出现在业务规则列表最下一行。
输入合理的开始与结束日期时间,选择相应的有效规则逻辑,点击保存按钮。注意一点的是,如果记录集中出现日期时间重叠的情况,管理器会给出警告提示:
“在日期/时间范围之间,范围重复”。
图5-11 创建/修改业务规则记录
修改业务规则记录的操作模式类似于上述步骤。
5.3.2 基于日期/时间的管理
业务规则管理器为用户提供了一个改变业务规则的便捷方式,那就是为业务规则分隔时间。如图5-12所示,管理器会根据你选择的开始日期/时间自动确定上一条记录的结束日期/时间。
另外,业务规则管理器还提供了从“指定日期”、“没有开始日期/时间”和“连续”三种方式来自动计算结束日期。
图5-12 基于日期/时间的管理
5.3.3 发布与还原
编辑完业务规则之后的最后一步工作就是发布,业务规则管理器提供了发布业务规则的功能,如图5-13所示。另外,它还提供了还原的功能以便于在发布之后仍要更改。
图5-13 发布与还原
发布之后,可以通过WID的集成测试组件重新对业务规则测试,测试的过程如前面介绍的图4-5所示。
结束语
实际的业务场景中,业务规则的不断更改常常让IT人员焦头烂额,而业务规则独立于业务逻辑能在一定程度上缓解这个矛盾。
本文从介绍面向服务体系结构领域中的业务规则概念出发,结合实际的应用场景,重点讲述了基于IBM业务整合旗舰产品WID和WPS如何实现业务规则逻辑的灵活应用。
结合实际的应用经验,本文中还给出了关于选择规则集还是决策表的最佳实践。接着,讲述了WPS中的一个重要插件工具----业务规则管理器----的实现机制。
业务规则管理器通过基于Web界面的方式让用户可以方便地管理规则逻辑,从而能够灵活地定制业务策略来满足随需应变的业务需求。
文章中详细讲述了如何基于WPS安装配置业务规则管理器,如何使用管理器导出规则组,以及如何基于该管理器实现对业务规则逻辑的定制管理等。
参考资料
关于作者  | |  | 王夕宁是IBM中国软件开发实验室SOA(中国)设计中心的软件工程师,他的主要技能和专长包括SOA、Web服务、J2EE、业务流程、模型驱动技术以及Eclipse开发等领域。目前从事于SOA领域中的业务/IT策略、规则方面的工作。可以通过wangxn@cn.ibm.com联系他。
|
对本文的评价
|