文献标识码: A
文章编号: 0258-7998(2015)02-0171-03
0 引言
企业通常通过实施“升级改造”完善其应用系统功能来适应信息技术的快速变革。传统的SOA模型采用“需求+服务”的两层结构,业务需求被划分为一系列业务服务,服务定义一个与业务功能或业务数据相关的接口并实现,属于静态模型,没有能够反映应用系统动态的运行时特征。这种开发方法从项目立项开发到部署实施耗时冗长,而且这种“伤筋动骨”的系统变更耗费大量资源,带来企业业务系统的不稳定和不连续性,增加企业的运营、管理和维护成本,难以解决业务升级与业务连续性之间的冲突。
工作流[1]是实现业务过程自动化的核心技术,主要实现业务过程的建模、优化、仿真、管理和集成并赋予业务管理系统高度的灵活性,而工作流技术与面向服务的架构(Service Oriented Architecture,SOA)[2]的结合可实现业务逻辑和流程逻辑的分离,通过对业务流程的分析和规范化定义实现对系统运行时特征的动态描述,基于构件[3]的业务单元亦可实现自动组装,在实际应用中具有重大意义。
1 业务模型
传统的SOA模型采用“需求+服务”的两层结构,业务需求被划分为一系列业务服务,一个服务定义了一个与业务功能或业务数据相关的接口,服务直接针对某一个需求定义并实现,属于静态模型,没有反映应用系统动态的运行时特征。本文在传统静态模型基础上进一步细化,提出一种新的包含语义流程的三层动态模型及其建模方法。在需求和服务中间加入对具体应用实现的流程描述,并将服务细化为针对具体应用的基本构件和原子构件,分别将其定义为概念模型、逻辑模型和物理模型,其对应关系如表1所示。其中概念模型用来定义一个应用的内涵,描述该系统可以提供的全部价值,与需求对应;物理模型定义具有完备性和独立性的原子构件,封装为实施具体操作的提供相应价值的服务;逻辑模型对应语义流程,由不同的构件序列或服务序列组合来完成具体需求,是概念模型到物理模型之间的关系映射。该方法通过建模平台对应用领域的概念、逻辑、物理三层建模,规范化表述流程描述,提取基本构件及原子构件,并由流程引擎[4]调用执行。
其中原子构件是业务功能实现不能再细分的最小单元,具有独立性和完备性。独立性强调原子构件自身不可再分,也不能由其他原子构件组合产生;完备性指出任何一个流程都可由不同的原子构件组合而成。两者通过业务流程联系起来完成具体的业务功能,构件模型的实现不依赖于具体的实现环境,只需提供接口机制即可使用,而且构件是高度可扩展的,而引入业务流程可以实现系统更加快速、灵活的开发,大大增加了系统的可扩展性。
2 系统架构
基于动态模型的系统开发方法,本文提出了一种新的系统开发架构,如图1所示。
在该系统中,建模平台采用“概念模型+逻辑模型+物理模型”的三层架构建模方法[5]针对具体应用领域建模,分别得出具体应用的概念层次隶属划分、业务流程的指令化描述及底层功能实现的基本构件和原子构件,其中后两部分分别作为流程引擎的输入和基本业务库及原子业务库的输入;界面平台提供与用户的交互,支持将用户提交内容转化为业务流程的指令化描述并反馈给流程引擎;引擎接收指令流程,从基本构件库或原子构件库调用基本构件或原子构件执行,通过报文的方式与核心数据库或其他业务接口完成数据交互。
该架构具有SOA架构的特征,符合工作流管理联盟WfMC提出的工作流参考模型。业务流程作为流程引擎的输入数据,业务改变时,通过引入新的流程数据并针对性地对基本构件库和原子构件库进行维护扩展,可实现新流程的快速部署。在该架构中,流程引擎和建模平台作为系统的运行和建模工具,分别进行详细描述和设计实现。
3 流程引擎
流程引擎类似于一个CPU,指令化的业务流程相当于CPU中执行的程序,每一个业务都对应着相应的一个流程。对于发起的任何一个业务,流程引擎从应用服务器中调出相对应的业务流程驱动执行[6]。流程是以构件为步骤节点的业务行为序列;执行一个业务流程时,流程引擎分析确定该流程执行的步骤顺序,并分析当前的步骤节点,根据分析结果从构件库选出恰当的构件执行。
流程引擎确定输入流程的执行顺序,具有同CPU的程序控制器相似的结构,如图2所示。
流程引擎由流程计数器、流程队列、构件计数器(Counter)、构件队列(Queue)、构件译码器等基本部件组成。流程队列存储流程的ID,流程ID由流程计数器确定,每一个流程ID对应一个构件计数器,构件计数器则指向执行系统操作的构件队列。当流程引擎驱动一个流程执行时,流程计数器指定流程ID,流程ID对应到构件计数器并由构件计数器指针指定当前构件。该构件完成译码后提交到服务总线,同时构件计数器指针指向下一个将要执行的操作(构件)。针对流程引擎逻辑结构,设计其基本物理结构如图3所示。
图中所示的流程引擎实现主要包括一个主处理节点和若干从处理节点,并且由总线将各部分联系起来。总线由一组上行线、一组下行线和一组状态检测线构成;主处理节点对应构件计数器,独占一组下行线,通过该总线向所有从处理节点发送通信消息;从处理节点对应原子构件或基本构件,根据给定的特定输入得到相应的需求输出,所有从处理节点共享一组上行线,通过状态检测线解决数据竞争冲突问题;其中所有节点通过统一节点接口(UNI)挂接在总线上。
4 建模平台
建模平台是一个依照本研究提出的动态模型来辅助支持应用系统建模的软件系统。建模平台通过对系统的建模为整个系统提供需求分析、语义描述并确立对应构件集合,在建模平台基础上,系统只需实现原子构件,而基本构件和其他所有业务步骤均由逻辑模型映射为原子构件的工作流程并由流程引擎调用执行。建模平台针对具体应用领域的建模是整个系统实现的基础,也是重要的组成部分。
4.1 实现工具
建模平台使用MVC模式[7]设计,该模式很好地做到了解耦,使代码和界面分离,数据库操作与Servlet操作分开,这样能够方便开发和以后的维护。开发工具选用Myeclipse,客户端选用IE浏览器,服务器端选用mysql数据库和轻量级WEB应用中间件Tomcat(Appach的一个免费、开放源码的项目,它是支持JSP和Servlet技术的容器)。
4.2 概念建模
建模平台将概念建模等价于建立一个动态树形菜单dTree,由JSP页面显示。dTree通过层次分明的索引确立了概念的外延与内涵以及相互之间的隶属关系,直到分解为不可再分的业务用例场景,从自然语言出发一步步建立抽象化和形式化的概念模型。dTree的实现使用了JQuery AJAX,即异步JavaScript和XML技术。
$.ajax({
…
success: function(xml){
tree.add(nodeId,parentId,nodeName,hrefAddress,
"","","","",false); …
document.write(tree);
JQuery Ajax()方法[8]在不重载整个页面的情况下,从后台加载数据并在页面显示。Success()函数定义了由jsp页面[9]调用JQuery请求servlet读取XML数据对象,通过遍历XML文件,获得树形菜单节点的属性和文本数据,再循环添加到dTree的节点中,形成树形菜单的概念模型。
4.3 逻辑建模
概念建模确立的动态树形菜单中,叶子节点与某一业务文档(逻辑)相对应,逻辑建模通过为每一个业务步骤标记属性,并通过序号、前件集合、后件集合等对业务用例场景流程数据进行确切表述,并以文档形式保存管理。
逻辑建模参照流程引擎结构完成了业务流程数据结构和流程指令的设计。业务流程数据设计将流程数据通过序号(Number)、业务名(BusinessName)、构件ID、属性(Attribute)、类型(Type)、前件集合(FrontSet)、后件集合(NextSet)及数据(Data)完整描述了业务步骤的各方面信息。流程指令设计部分包括通用控制类指令和数据搬移类指令,分别举例如下:
JMP Number; //无条件调转类指令;
意指将PC指针指向Number指定的构件
DETZ Attriute Number; //条件跳转类指令;意指判断
Attribute属性,如为0,则PC调转至Number
指定的构件;否则顺序向下执行
MOV Number NextSet; //数据搬移类指令;
意指将后件集合中内容赋予Number
逻辑建模实现从用自然语言描述的业务流程到流程核心内容的提取,并通过控制指令及数据搬移指令集合形成业务流程的完备描述,可通过流程引擎调用执行。
4.4 物理建模
物理建模为每个具体应用确立一个原子业务库和一个基本业务库。针对流程文档中的每一个步骤节点确定其属性分别纳入原子业务库或基本业务库。构件的提取、录入通过JSP表单实现,表单通过编辑javascript函数控制步骤录入,利用DAO[10](数据访问对象)模式实现与mysql数据库的操作,分别通过executeUpdate()和executeQuery()执行数据库更新和查询操作:
public int executeUpdate(String sql){}
public ResultSet executeQuery(String sql){}
所有的步骤节点全部标记录入完成,以表单的形式存储在数据库中。在该结构中,原子业务库和基本业务库支持更新和扩展,构件可由软件或硬件实现,并且可以为不同的应用领域建模,具有很高的灵活性。
本文使用建模平台完成以卡银行核心业务为例的建模,建模平台概念建模实现卡银行业务菜单界面如图4,数据库表中原子业务及基本业务表如图5。
5 小结
本文充分结合了工作流及SOA思想的特征,以流程引擎和建模平台为基础,提出了基于动态模型的应用系统架构,详细描述了流程引擎部分并搭建了建模平台。采用了“概念模型+逻辑模型+物理模型”的动态架构建模方法,有一定的抽象但又利于理解,建立了分层结构但又独立于具体技术。基于动态模型的业务系统架构为业务流程再造提供了便利松弛的环境,结合流程引擎特别容易实现对新、旧业务的平滑过渡,成为业务持续性管理的理想架构,可实现业务系统的快速开发和重构,是一种具有重要实际意义的系统开发方法。
参考文献
[1] 陈儒,肖刚,张元鸣,等.基于事物规则的面向服务工作流模型研究[J].计算机应用与软件,2014,31(6):5-7.
[2] 管红杰,王珂,江海峰,等.SOA架构的工作流管理系统的研究与应用[J].计算机工程与设计,2011,32(5):1654-1657.
[3] 张功萱,陈瀚,王永利,等.一种消息驱动的SOA系统集成方法[J].计算机系统应用,2012,21(6):86-90.
[4] WfMC TC210162X.Workflow management coalition interface 1:Process definition interchange Q&A and examples[S].1999.
[5] 曾诚,何克清,李兵.一种用户驱动的服务资源建模方法[J].计算机应用与软件,2012,29(8):21-23.
[6] 吴益尔,蔡鸿铭,步丰林,等.基于语义的三维元素的概念关系建模的研究[J].计算机应用与软件,2011,28(3):8-12.
[7] 张婷.基于Extjs+Spring MVC的WEB系统开发架构的研究与实现[J].计算机技术与发展,2013,1(23):147-149.
[8] 陈莉莉,张丽,刘正龙.搜索引擎中基于状态的Ajax动态网页提取研究[J].计算机应用与软件,2013,30(7):217-220.
[9] 甘勇.JSP程序设计技术教程[M].北京:清华大学出版社,2010.
[10] 陈丹丹,李银龙.Java开发宝典[M].北京:机械工业出版社,2012.