王重英
摘 要:工作流系统是企业业务流程实现自动化的一项重要技术。它具有提高企业运营效率,改善企业资源利用,提高企业运作的灵活性和适应性等诸多优点。然而,传统的工作流系统在复杂多变的企业业务流程中存在很多不足。据此提出一种基于规则引擎的工作流系统模型。通过规则引擎的应用,有效地把业务规则与基本技术实现分离,提高了系统的适应性和灵活性。最后,结合电信公司资费优惠套餐计划,利用Drools设计出基于XML的业务规则。
关键词:工作流;RBES;规则引擎;Drools
中图分类号:TP311文献标识码:B
文章编号:1004-373X(2009)12-042-03
Design of General Application Framework of Workflow Based on Rule Engineer
WANG Chongying
(Shangluo Institute,Shangluo,726000,China)
Abstract:Worlflow is one of important technologies in enterprise business process automation.It has many advantages such as raising efficiency of business operation,improving use of resourse,increasing flexibility and adaptability of business executation and so on.The lack of workflow system in complex enterprise business is analyzed,a workflow system model based on rule engine is put forword to enhance the flexibility of the system.Rule based on xml with Drools by applying the preferential polices of conmunication expenses about telecommunication company is presented.
Keywords:workflow;RBES;rule engine;Drools
0 引 言
工作流管理通过对企业业务过程中的内在逻辑关系进行建模,并提供相关的运行环境,实现企业业务过程重组、过程管理与过程自动化。由于现实生活中企业业务规则在时间、因果等关系上的灵活性和不确定性,实现有效工作流管理的一个关键问题是提高工作流管理系统的适应性。如今,在许多基于Web的应用领域中,都存在着对推理引擎的需求,如基于Web的专家系统、联机分析系统、数据挖掘系统、智能搜索引擎等。如果能够开发一个开放的、对象化的、基于Web的推理引擎,势必会节省大量的重复开发工作,从而促进基于Web的智能软件开发及发展。这里设计一种基于Java规则引擎(Rules Engine)的工作流框架。
1 基于规则的专家系统(RBES)
规则引擎则是基于规则的专家系统的一部分。为了更深入地了解Java规则引擎,下面简要地介绍基于规则的专家系统(RBES)[1]。RBES包括3部分:Rule Base(Knowledge Base),Working Memory(Fact Base)和Rule Engine(推理引擎),其结构如图1所示。
图1中,推理引擎包括3部分:模式匹配器(Pattern Matcher),议程(Agenda)和执行引擎(Execution Engine)。推理引擎通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。模式匹配器决定选择执行哪个规则,何时执行规则;议程管理模式匹配器挑选规则的执行次序;执行引擎负责执行规则和其他动作。与人类的思维相对应,规则引擎存在两种推理方式:演绎法(Forward-Chaining)和归纳法(Backward-Chaining)。演绎法从一个初始的事实出发,不断地应用规则得出结论(或执行指定的动作);归纳法从假设出发,不断寻找符合假设的事实。
图1 基于规则的专家系统结构图
Rete算法[2]是目前效率最高的一个Forward-Chaining推理算法,绝大多数Java的推理引擎都采用这一算法。规则引擎的推理步骤:
(1) 将初始数据(Fact)输入工作内存;
(2) 使用模式匹配器比较规则(Rule)和数据(Fact);
(3) 如果执行规则存在冲突(Conflict),即同时激活多个规则,将冲突的规则放入冲突集合;
(4) 解决冲突,将激活的规则按顺序放入议程;
(5) 使用规则引擎执行议程中的规则。重复步骤(2)~(5),直到执行完所有议程中的规则。
2 Java Rule Engine API规范(JSR-94)
2003年11月,Java社区通过了Java Rule Engine API规范(JSR-94)的最后草案。它是由javax.rules包定义,是访问规则引擎的标准企业级API。Java规则引擎API允许客户程序使用统一的方式和不同厂商的规则引擎产品交互,就像使用JDBC编写独立于厂商访问不同的数据库产品一样。Java规则引擎API包括创建和管理规则集合的机制,在Working Memory中添加、删除和修改对象的机制,以及初始化、重置和执行规则引擎的机制[3]。图2给出基于规则引擎 的工作流管理系统。
图2 基于规则引擎的工作流管理系统
3 基于Java规则推理的工作流应用框架
3.1 工作流应用框架
按照WFMC的定义[4],工作流的概念被概括为“业务过程的部分或全部在计算机应用环境下的自动化”,它所要解决的主要问题是“在多个参与者之间按照某种预定义的规则传递文档、信息或使任务的过程自动进行”, 从而实现某个预期的业务目标,或者是促使该目标实现。该工作流应用框架采用面向对象的方法和组件化的架构设计,系统采用组件模型和Java编程技术,并完全基于J2EE平台的规范设计和构建。该工作流平台的核心模块是工作流引擎。工作流引擎包括3个核心组件:工作流对象、工作流路由器和规则引擎。1个工作流实例由一组相关的工作流对象代表。工作流对象中封装了工作流的相关数据,每一个工作流对象都有1个关联的应用对象,应用对象中封装了相关的应用数据[5]。
工作流路由器是工作流引擎的心脏,其功能是推进工作流实例执行。工作流路由器把每个工作流对象在合适的时间传递到合适的队列中。规则引擎是工作流引擎的大脑,其功能是根据已经定义好的工作流规则,一个工作流对象以及与它关联的应用对象当前所处的状态,决定这个工作流对象的下一个队列[6],该规则引擎引入了一个基于Rete算法的Java规则引擎。
图3所示是工作流对象、工作流路由器、规则引擎、应用对象和应用程序之间的关系。应用对象与工作流对象之间的关联是在创建工作流对象时动态建立的。工作流路由器仅传递工作流对象,不涉及与工作流对象关联的应用对象。应用程序只是对应用对象进行操作,与工作流对象无关。这是该工作流引擎保持其通用性的关键,规则引擎提供的动态绑定功能,进一步增加了工作流引擎的灵活性[7]。
图3 工作流相关关系图
3.2 Drools开源项目
目前,支持JSR-94规范的产品中最为成熟且又免费的是Drools[8]。Drools是一个Bob McWhirter开发的开源项目。Rete算法可实现一个增强的Java语言。Drools利用XML和Java就可以实现规则引擎的强大功能,具有很好的应用前景,目前已发表了2.0-beata-14版。Drools提供了3种语义模块——Python模块、Java模块和Groovy模块。Drools项目的规则文件为自定义格式,由一个XML语言定义的基本语义模块加上Java(Groovy或Phython)语义模块组成。开发者也可以根据需要定制自己专用的语义模块。每一个规则文件包括一个惟一的规则集,规则集包括一个或多个规则,每个规则包括一个或多个参数。这些参数用于在规则的条件中进行判断和执行相应的操作,参数对应的是一个Java类,Drools会在创建工作内存的时候把它自动实例化,每个规则包括一或多个条件以及一个最后的操作。
下面通过一个简化的电信资费优惠处理模型,说明Drools在实际中的应用。
电信公司为了吸引顾客,经常会推出各种资费优惠套餐计划,这些优惠措施包括打折、固定折扣(消费满一定额度返还一部分固定费用)等。现假设存在以下优惠规则:
(1) 长话费超过200元的用户,超出部分长话费优惠20%;
(2) 上网费超过200元的用户,市话费减免50%,但最多减免50元。
即使就这么2条简单的规则,如果直接编程实现也将是一大堆if语句,既不容易实现,更难以维护,利用Drools可实现这些规则。相应的规则文件charge.java.drl具体内容如下[9]:
Integerdis=newInteger((a.getPrimCharge("chf")-200)*(-0.2));
a.addDisc("discount1",dis);
Int idis=a.getPrimCharge("shf")*0.5;
if(idis>50)idis=-50;
else idis=-idis;
a.addDisc("discount2",new Integer(idis));
[10]
最后调用这些规则,生成的代码非常简单。
4 结 语
从前面的讨论可看出,采用开源项目Drools 规则引擎,能够有效地分离业务规则与基本技术,对业务规则的改变只需改变XML文件而不需要修改工作流引擎,从而为工作流管理系统处理商业复杂多变的业务规则提供了一种解决方案。可以预见,随着Java规则引擎工具的不断成熟,这一技术必将被越来越广泛的应用,成为解决实际工程中复杂业务规则问题的有力工具。
参考文献
[1]N.Alex Rupp.A Intruduction to The Drools Project[A].http://www.theserverside.com/tt/articles/article.tss?l=Drools,2004.
[2]郭芳,白建军.基于Rete算法的规则引擎JBoss Rules[J].计算机时代,2008(1):12-14.
[3]张宇,陈德礼.Drools规则引擎应用分析[J].福建电脑,2007(10):15-16.
[4]范玉顺.工作流管理技术基础实现企业业务重组、过程管理与过程自动化的核心技术[M].北京:清华大学出版社,2001.
[5]邬少飞.Service-based Flexible Workflow System for Virtual Enterprise[J].Journal of Chongqing University:English Edition,2008,3:73-76.
[6]Zhang Ye,Zhe Jiang.A Technical Support to Integrated Logistics Strategytr Ansform: Distributed Workflow Management System[A].第十四届工业工程与工程管理国际会议[C].2007.
[7]Wil.工作流管理模型、方法和系统[M].王建民,译.北京:清华大学出版社,2004.
[8]朱先飞.Drools在电信网络开通系统中的应用及其改造[J].广东通信技术,2007(11):10-12.
[9]任忠保,张艳晶,李立亚.基于Drools的策略体系设计[J].计算机安全,2007(8):64-66.
[10]张渊,夏清国.基于Rete算法的Java规则引擎[J].科学技术与工程,2006(6):94-96.