最近,因项目需要,研究使用IBM的规则引擎,但是网上相关资料甚少,只能查看IBM官网的相关文档,但大多是英文,所以学习过程相当痛苦,好在有IBM的技术支持人员帮助,在此,决定将自己对ODM的学习过程做成一个入门系列,巩固一下自己,同时惠及他人。
ODM:Operational Decision Manager,直接翻译的话就是“决策管理系统”,什么是决策?决策就是业务人员或决策人员制定的业务规则,而ODM就是管理这些业务规则的一套系统。举个简单例子来说:一个店铺,双十一期间打折,根据用户的等级给出的折扣是不一样的,如:普通用户享受9折优惠,白金用户享受8折优惠,钻石用户享受7折优惠,这就是“业务规则”,这样的业务场景在我们身边比比皆是,一般我们的做法是在代码中做一系列if...else判断,更好一些的做法是将规则条件转换成配置文件,实现与代码的低耦合,但是,一旦发生了规则的添加那么代码就一定得作出修改。当然,这紧紧是列举了一个相当简单的业务场景,面对那些复杂的业务场景涉及成千上万的规则判断时候,那在应用代码中维护,就是一项十分恐怖的工作。ODM就是一套管理这些业务规则并且独立于应用系统之外的一个产品,它包含了很多组件可以帮助IT或非IT之外的人员实现决策的定制、维护和监控工作,帮助决策人员作出更好的决策,大大降低复杂业务规则维护带来的巨大工作量,它支持对外提供web服务,满足SOA架构需求。
这里介绍一些主要的组件:
1、Rule Designer:这是创建规则项目、打包、发布规则的一个编辑器,本身是一个eclipse插件,会使用eclipse便可以很轻松掌握这款编辑器的使用。
2、Rule TeamServer:也叫决策中心,简称rts,在编辑器(Rule Designer)中编辑好的规则项目可以同步到rts,业务人员和it人员可以在这个环境上进行规则集的调试,规则流结构的调整,以及向规则集中编辑添加新规则,支持业务人员以导入excel的形式导入新规则等等。
3、Rule Execution Server:规则执行环境,简称res,有人说他是规则引擎的核心,在编辑器中编辑好的规则,打包部署到res环境上,规则集便可以进行执行,该服务支持将规则发布成webservice,以供客户端调用,res同时支持规则的完成性检查,可以对规则调用的次数及效率进行监控,支持生成excel文件类型的规则执行报告。
上面介绍了ODM的主要组件,接下来,开始我们本篇博客的主要内容部分:使用Rule Designer编辑器创建规则项目,至于rts及res,会在本系列之后的博文中再做详细讲解。
设置一个简单的业务场景:
人员信息检查:
1、人员的年龄<18岁,不检查人员性别,设置人员信息为“未成年人”;
2、人员的年龄>=18岁,检查人员性别,设置人员信息为“成年女/男性”;
从业务场景中我们简单提炼出一个人员的java bean对象:
public class Person{ //年龄 private int age; //性别 private String sex; //信息 private String msg; //getter and setter
}
在开始创建规则项目之前,还需要明确两个概念:
XOM:执行对象模型,就是规则引擎执行规则过程中所使用的对象,可以是java bean对象,如上文的 Person,也可以是XML
BOM:业务对象模型,其实就是XOM的一个映射,将XOM中的程序描述语言映射成业务描述语言,如:将age属性映射成年龄,将sex属性映射成性别,主要是用来方便业务人员(非IT)维护规则。
明白了业务场景和理解了以上的两个概念,我们就可以开始开发规则项目了
打开Rule Designer编辑器,首先我们需要创建一个普通的java项目,该项目中只包含XOM对象
在编辑器的“规则资源管理器”内鼠标右键》新建》项目》java项目,输入名称:Person-xom,点击完成。
在person-xom项目中创建Person.java类(即上文给出的Person java bean)
创建一个规则项目
在编辑器的“规则资源管理器”内鼠标右键》新建》项目》规则项目
点击“下一步”,
输入项目名称:PersonRule,点击“下一步”,
没有其他规则项目需要引用,点击“下一步”,
XOM设置中,选择创建的Person-xom项目,点击“下一步”,
没有动态XOM,直接点击“完成”。
此时,我们的规则项目已经创建好了,整体的项目结构如下:
鼠标点击一下规则项目,编辑器会显示“规则项目图”视窗:
如果没有显示这个视图,可以通过如下操作打开此视窗:窗口》显示视图》规则项目图,这个视图类似一个规则项目的导航,显示着当前规则项目已经具备了哪些结构,还有哪些结构需要完善,其中,蓝色的导航是可以操作的结构,如:导入XOM,创建BOM等,因为我们在创建规则项目的时候已经将Person-xom导入进项目,所以,视图中“导入XOM”导航条目后面会跟一个(1),当然,如果需要,可以点此条目导航继续添加XOM;还有另一部分导航条目是灰色的,这是因为要设置这些条目内容是需要前置条件的,如:“定义参数”导航条目需要“创建BOM”之后才可用,了解了这些,就可以根据整个视图的导航来一步步完成我们规则项目内容的创建了,在此多说一句,以上导航条目都可以在项目上右键鼠标找到,但是建议使用“规则项目图”,可以更方便和更直观的对整个规则项目进行把控。
点击“创建BOM”导航
输入名称:person,勾选“从XOM创建BOM条目”,点击“下一步”,
点击“浏览XOM”按钮,
选择person-xom,点击“确定”,
勾选Person类,点击“下一步”,
将“所有方法”勾选,点击“完成”按钮。
到此处,我们便完成了BOM的创建,此时,查看“规则项目图”视图中的“创建BOM”导航条目后面也会出现一个(1),说明,我们创建BOM成功。
如上图,因为我们创建了BOM,所以“定义参数”导航条目也变成可用的了,但是,先不急定义参数,BOM创建完成之后,还需要对其进行编辑,将它的各个属性映射成业务相关语言,生成编辑规则时可用的词汇表。(这一步不是必须需要,如果你能保证以后规则的维护都是IT人员,那么不用做此不操作,如果保证不了,还是需要完成此不操作,这样有助于非IT人员对规则的编辑和维护,这也是ODM的强大之处)
创建完成BOM之后,规则项目目录结构如下:
在规则项目中,双击创建的BOM(Person类),打开BOM信息展示视图
在这个视图的右上“类语言描述部分”中有一个“术语”条目
将术语中的“person”修改为“人员”,并进行保存,这样便完成了类名从person到人员的映射设置。
在规则项目中双击BOM对象的age属性,
打开此属性信息视图,
细心的朋友可能注意到了,通过切换视图下面的tab页也可以切换各个视图。在这个视图中,点击“编辑短语中使用的主题”,