李爱萍,王正华,段利国
(太原理工大学 计算机科学与技术学院,山西 太原030024)
遗留系统蕴含着丰富的领域知识,所以在企业应用集成时,对其处理至关重要。而目前主流的Web应用集成的方法是基于Web服务的形式,将遗留系统资源整合成可操作的、基于标准的服务,使其能够被重新组合和应用。目前对Web服务已经有了较充分的研究,对服务接口模型的设计以及服务组合的建模研究,成果丰硕[1-3],但是在Web服务应用集成的灵活性上还是存在一些问题,虽然提出了遗留系统服务的形式化封装[4],并出现了不少Web服务的白盒迁移的研究成果,但其迁移需要侵入遗留系统内部,侵入系统后稳定性方面存在问题,进而提出了一种基于有穷状态自动机形式描述的黑盒Web遗留系统服务化的包装方法,并基于此分析遗留系统移植过程中具体的用例包装。
本节简述相关工作。文献 [5]提出面向系统集成的Agent包装模型,并在服务Agent的包装中提出了基于功能Agent能力的服务流程的设计策略;文献 [6]借助带类型的Pi演算,描述和验证面向服务更新中的服务重绑定的类型安全性,从而提供更新系统的一致性的基础;文献[7]中提出了基于事件的方法建模并通过事件序列图测试Web服务的交互行为;文献 [8]设计和实现了一种将功能组件形式的遗留系统自动Web服务化封装的工具,从而实现遗留系统向SOA 迁移;文献 [9]中提出了一种辅助集成框架SOSIM,实现异构资源的重用和集成;文献 [10]中引入垂直服务组合的概念并提出了一种扩展的企业服务总线实现垂直服务组合的概念。与以上工作相比,本文提出了用有穷状态自动机描述Web遗留系统服务化的包装方案,有穷状态自动机能够更好的描述特定的交互状态以及状态之间的转移,并且以遗留系统的移植过程的用例包装为例分析验证方案的可行性。
包装Web遗留系统的交互式功能,封装原始的用户接口,执行每一个功能时,包装器能够代表用户自主的与遗留系统进行交互。为了实现自主的交互,包装器必须意识到在每一个事务处理中的会话规则,系统响应的结果依赖于用户的输入和系统的内部状态;在方法执行的过程中包装器能够管理所有动作的转向,通过分析系统返回画面的执行场景识别交互过程中达到的状态。
基于表单的系统,假定自动机状态关联接口不同的画面类型和用户在画面执行动作引起状态转换的条件下,有穷状态自动机可以对人机交互进行建模,在用户与系统之间,这种接口类型下有穷画面类型集和消息类型集触发状态的转换,并且系统的响应依赖于消息和系统的内部状态。
为了满足这些需求,有穷状态自动机很适合描述与Web遗留系统之间交互的行为模型,本文基于有穷状态自动机描述:有穷状态自动机FSA 是一个五元组,FSA =(S,T,A,Sin,Sfin),其中,S是在会话期间所达到的交互状态集;T 是状态之间的转换集合;A 是不同类型动作的集合;最后Sin和Sfin分别代表初始和终止交互的状态。系统对于用户消息的响应依赖于不同类型的消息和系统的内部状态,对于一个给定的状态,给定一个输入,FSA 可能会有多个转向或者没有转向。
包装器的参考体系模型可以分为3个主要的构件:自动机引擎,终端模拟器和状态标识器。这些构件都依赖于存储器,它可以持久化存储有穷状态自动机和与用例相关的可解析的画面模板描述。包装器的核心是自动机引擎,充当自动机解析器;状态标识器可以标识当前状态,通过解析由遗留系统返回的画面得到;终端模拟器实现了与遗留系统之间进行交互的终端类型的抽象。
包装器的逻辑体系结构如图1所示,展示了模块及组件之间的协作关系以及交互之间的数据流动。
图1 包装器的逻辑体系结构
终端模拟器实现从遗留系统外部访问的不同终端类型的抽象,可以通过系统提供的应用编程接口 (API)访问遗留系统的功能,也可以通过用户接口 (UI)或者是协议。不管终端的类型是什么,终端模拟器都会提供一个相应的编程接口,在遗留系统输入/输出的设备上进行标准的可执行读/写操作,通过自动机引擎解析接口与遗留系统进行通信。
对遗留系统进行FSA 建模,在不同的交互状态下状态发生转换,交互状态与画面模板相关联,状态标识器的职责是将遗留系统返回的画面状态匹配相应的画面模板。状态标识器和自动机引擎组件通过异步通信的方式交换信息:自动机引擎发送当前的画面描述 (从终端模拟器获得)到状态标识器,并且等待状态标识器响应相应的交互状态和画面内容,包括在标签中的存储值,输入和输出域值。
包装器的核心-自动机引擎 (AE),解析FSA 的描述并和其它包装组件交换信息,协同与遗留系统之间的交互。自动机引擎的执行由应用服务器发起,每一个服务在存储器中存储着相应的FSA 描述文档,可以被AE解析。
由AE实现的活动图如图2所示,作为UML的活动图包括3种基本状态:开始状态,解析状态和最终状态。
图2 自动机引擎活动
开始状态 (start activity)包括以下行为:通过应用服务器接收服务请求消息,从存储器中读取相应的XML自动描述文件,一些预设的初始化行为 (包括缓存变量,也叫自动机变量)的执行,通过终端模拟器接受遗留系统返回的画面,通过状态标识器组件获得当前的交互状态。
引擎进入解析状态 (interpretation activity),当当前状态非最终状态时,引擎执行和当前用户状态 (包括自动机变量和遗留系统的输入/输出域)相关联的动作,提交新的输入和执行命令至遗留系统,等待新交互状态下的画面的产生。当当前状态与计算的最终状态一致时,包装器离开解析状态进入最终状态 (final activity)。
最终状态 (final activity),包装器以自动机变量存储的数据为基准,组装服务响应消息,并发送给应用服务器。
存储器以持久化的方式存储着FSA 的解析描述和由遗留系统提供的每一个服务的画面模板描述。这些描述以XML文件的形式存储,即FSA 的描述文档。FSA 描述文档的信息包括交互状态,状态的转换,画面模板,由包装器执行的动作,以及缓存中间数据的自动机变量列表等。
Pine应用是一个基于面向流式终端的客户端邮件应用的遗留系统,允许用户从已存在的邮件信箱里读取、重组和管理Email消息,可以从中选取候选用例移植至SOA环境中。
在Pine应用提供的不同用例中,以移植 “Get Message”可复用服务的候选用例为例,将细粒度的Pine的 “Get Message”用例转换成单个的Web服务。 “Get Message”用例允许邮箱的拥有者获取给定的Email文件下特定的Email信息文本,为了使用此功能,系统为用户提供了登录的用户名和密码,可访问的文件名以及可读取的消息号。
本节将之前介绍的包装器的设计方案应用于 “Get Message”用例移植过程的上下文中,移植过程包含下面的阶段:选择候选服务、包装 “Get Message”用例、部署和验证 “Get Message”用例。
这一阶段决定遗留系统的哪一个用例可以作为服务,需要对用例的标准、方法和结构进行系统的分析,然后选择候选服务。识别候选服务,需要考虑遗留系统的功能的复用性,粒度大小、状态依赖性等因素。
“Get Message”用例的自动机图形化表示如图3所示,“Get Message”用例呈现7种不同的场景:其中3个对应成功消息的读取,而另外4个对应失败信息的读取 (由错误的用户密码,空文件,不存在的文件,不存在的消息号引起的)。
这一阶段包装所选择的 “Get Message”用例,包装过程包括服务标识,逆向工程和包装设计。
(1)服务标识分析决定候选用例是否转变成单个高度一致的服务或者是一组服务, “Get Message”用例是包装成单个的Web服务。
(2)对 “Get Message”候选用例进行逆向工程,黑盒分析收集遗留系统返回的画面序列和交换的信息并进行分类,获得画面类型的集合和消息类型,进而构建 “Get Message”自动机。逆向工程的第一个输出是 “Get Message”有穷状态自动机,包括交互的状态集,转换,以及由转换触发的动作。第二个输出是关联每一个交互状态的画面模板,包括所有需要的画面特征。第三个输出是包装“Get Message”服务的接口,通过服务请求消息提供给遗留系统的输入变量集,通过服务响应消息获取输出变量。
逆向工程阶段,系统的黑盒分析对与遗留系统进行交互的有穷状态自动机进行抽象,这些分析由运行中的系统执行,应用持久化存储着不同的输入数据和条件,能够重新产生所有可能的用例交互场景。在分析期间,收集所有的信息表征这些交互,在分析的最后,FSA 模型产生,包含23个交互状态和28个转向,它由15种画面模板 (关联交互状态)表征,如图3所示。在 “Get Message”用例中,画面模板的数量低于交互状态的数量,因为一些交互状态(如17,18,19,20,21)由相同的画面模板表征。
图3 “Get Message”用例的自动机图形化表示
服务接口包括以下输入数据:用户认证数据 (用户名和密码),包含信息的文件名,请求消息的普通序列号,输出数据包含Email信息 (Date,from,To,Cc,Subject,Body)或者异常信息。
“Get Message”用例场景FSA 的描述如表1所示,前两列是交互状态的标识和描述,第三列是当前交互状态将会被自动机引擎执行的动作,第四列是提交动作的命令,最后一列表示从当前状态可能达到的下一个状态。自动机中存在5个状态,其下一可能转向的状态多于一个 (状态号分别是2,5,9,13,14)。自动机变量,定义存储了4个请求消息的域的11 个变量以及7 个响应消息的域(Date,from,To,Cc,Subject,Body,Exception)。
(3)包装设计的目标是使得交互模型可以被自动机引擎解析,自动机解析后信息模型必须被翻译成XML格式并且存储在存储器中。
这一阶段,将包装的服务使用特定的商业或者开源Web服务器部署。当包装后的服务以Web 服务发布后,WSDL文档中的请求消息中包含的输入数据和响应消息中包含的输出数据将会被存储到Web服务器中,同时服务的UDDI在公共的UDDI存储目录上存储。服务在Web服务器部署完成后,需要提交包装功能的服务至验证活动,验证是在服务执行的过程中测试由于自动机的设计缺陷可能出现的状态标识异常和不可预料的响应。
基于FSA 模型的分析,设计用例测试每一个不依赖的自动机路径。表2所示的测试用例覆盖 “Get Message”用例的场景,包含覆盖场景的描述和相应的线性独立的FSA图交互状态路径集。通过对测试用例的分析检测画面模板和自动机描述中的错误。
本文提出了一种基于有穷状态自动机描述的黑盒Web遗留系统的服务化包装方案,给出了包装方案的参考模型,对模型内的主要包装组件:自动机引擎,终端模拟器以及状态标识器的功能进行了描述。此外,基于此方案将包装“Get Message”用例应用于移植的上下文环境,进而验证方案的可行性,为包装Web遗留系统的功能提供了理论参考。本文的工作还有待进一步完善,比如包装后服务质量(QOS)的提升和包装的框架模型的验证将是下一步工作的重点。
表1 “Get Message”用例场景FSA 的描述
表2 服务验证期间的测试用例
[1]CHEN Zhenbang.Research on interface model and component design in service-oriented computing [D].Changsha:National University of Defense of Technology,2009:137-163 (in Chinese). [陈振邦.服务计算中接口模型与构件设计的研究[D].长沙:国防科技大学,2009:137-163.]
[2]DONG Yuxiang.A petri-net based approach to modeling and quality-of-service evaluation of service composition [D].Chongqing:Chongqing University,2010:23-50 (in Chinese).[董宇翔.服务组合的Petri网建模和服务质量分析的研究 [D].重庆:重庆大学,2010:23-50.]
[3]ZHANG Defen.Research of active services component composition based on Web [D].Wuhan:Wuhan University of Technology,2010:38-45 (in Chinese).[张德芬.基于Web的主动服务构件组装的研究 [D].武汉:武汉理工大学,2010:38-45.]
[4]Hui Ma,Klaus-Dieter Schewe,Bernhard Thalheim,et al.A formal model for the interoperability of services clouds [J].SOCA,2012,6 (3):189-205.
[5]LIU Yang.Research and implementation of an agent wrapper model based on federation used in system integration [D].Xi'an:Xidian University,2010:13-37 (in Chiense).[刘阳.系统集成基于联邦的Agent包装模型的研究与实现 [D].西安:西安电子科技大学,2010:13-37.]
[6]WANG Dejun.Research on dynamic updating of service-oriented distributed system [D].Shanghai:Shanghai JiaoTong University,2010:75-104 (in Chinese).[王德俊.面向服务的分布式系统动态更新研究 [D].上海:上海交通大学,2010:75-104.]
[7]Fevzi Belli,Michael Linschulte.Event-driven modeling and testing of real-time web services[J].SOCA,2010,4 (1):3-15.
[8]WANG Min.Research and implementation of a tool for system migration [D].Xi'an:Xidian University,2010:17-26 (in Chinese).[汪敏.遗产系统Web服务化封装工具的研究与实现.西安:西安电子科技大学,2010:17-26.]
[9]YANG Sida.Research of Legacy System integration based on Web services [D].Wuhan:Huazhong University of Science and Techonology,2011:18-42 (in Chinese).[杨思达.基于Web服务的Legacy Systems集成方法研究.武汉:华中科技大学,2011:18-42.]
[10]Ralph Retter,Christoph Fehling,Dimka Karastoyanova,et al.Combining horizontal and vertical composition of services[J].SOCA,2012,6 (2):117-130.