李愛萍,王正華,段利國
(太原理工大學 計算機科學與技術學院,山西 太原030024)
遺留系統(tǒng)蘊含著豐富的領域知識,所以在企業(yè)應用集成時,對其處理至關重要。而目前主流的Web應用集成的方法是基于Web服務的形式,將遺留系統(tǒng)資源整合成可操作的、基于標準的服務,使其能夠被重新組合和應用。目前對Web服務已經(jīng)有了較充分的研究,對服務接口模型的設計以及服務組合的建模研究,成果豐碩[1-3],但是在Web服務應用集成的靈活性上還是存在一些問題,雖然提出了遺留系統(tǒng)服務的形式化封裝[4],并出現(xiàn)了不少Web服務的白盒遷移的研究成果,但其遷移需要侵入遺留系統(tǒng)內部,侵入系統(tǒng)后穩(wěn)定性方面存在問題,進而提出了一種基于有窮狀態(tài)自動機形式描述的黑盒Web遺留系統(tǒng)服務化的包裝方法,并基于此分析遺留系統(tǒng)移植過程中具體的用例包裝。
本節(jié)簡述相關工作。文獻 [5]提出面向系統(tǒng)集成的Agent包裝模型,并在服務Agent的包裝中提出了基于功能Agent能力的服務流程的設計策略;文獻 [6]借助帶類型的Pi演算,描述和驗證面向服務更新中的服務重綁定的類型安全性,從而提供更新系統(tǒng)的一致性的基礎;文獻[7]中提出了基于事件的方法建模并通過事件序列圖測試Web服務的交互行為;文獻 [8]設計和實現(xiàn)了一種將功能組件形式的遺留系統(tǒng)自動Web服務化封裝的工具,從而實現(xiàn)遺留系統(tǒng)向SOA 遷移;文獻 [9]中提出了一種輔助集成框架SOSIM,實現(xiàn)異構資源的重用和集成;文獻 [10]中引入垂直服務組合的概念并提出了一種擴展的企業(yè)服務總線實現(xiàn)垂直服務組合的概念。與以上工作相比,本文提出了用有窮狀態(tài)自動機描述Web遺留系統(tǒng)服務化的包裝方案,有窮狀態(tài)自動機能夠更好的描述特定的交互狀態(tài)以及狀態(tài)之間的轉移,并且以遺留系統(tǒng)的移植過程的用例包裝為例分析驗證方案的可行性。
包裝Web遺留系統(tǒng)的交互式功能,封裝原始的用戶接口,執(zhí)行每一個功能時,包裝器能夠代表用戶自主的與遺留系統(tǒng)進行交互。為了實現(xiàn)自主的交互,包裝器必須意識到在每一個事務處理中的會話規(guī)則,系統(tǒng)響應的結果依賴于用戶的輸入和系統(tǒng)的內部狀態(tài);在方法執(zhí)行的過程中包裝器能夠管理所有動作的轉向,通過分析系統(tǒng)返回畫面的執(zhí)行場景識別交互過程中達到的狀態(tài)。
基于表單的系統(tǒng),假定自動機狀態(tài)關聯(lián)接口不同的畫面類型和用戶在畫面執(zhí)行動作引起狀態(tài)轉換的條件下,有窮狀態(tài)自動機可以對人機交互進行建模,在用戶與系統(tǒng)之間,這種接口類型下有窮畫面類型集和消息類型集觸發(fā)狀態(tài)的轉換,并且系統(tǒng)的響應依賴于消息和系統(tǒng)的內部狀態(tài)。
為了滿足這些需求,有窮狀態(tài)自動機很適合描述與Web遺留系統(tǒng)之間交互的行為模型,本文基于有窮狀態(tài)自動機描述:有窮狀態(tài)自動機FSA 是一個五元組,F(xiàn)SA =(S,T,A,Sin,Sfin),其中,S是在會話期間所達到的交互狀態(tài)集;T 是狀態(tài)之間的轉換集合;A 是不同類型動作的集合;最后Sin和Sfin分別代表初始和終止交互的狀態(tài)。系統(tǒng)對于用戶消息的響應依賴于不同類型的消息和系統(tǒng)的內部狀態(tài),對于一個給定的狀態(tài),給定一個輸入,F(xiàn)SA 可能會有多個轉向或者沒有轉向。
包裝器的參考體系模型可以分為3個主要的構件:自動機引擎,終端模擬器和狀態(tài)標識器。這些構件都依賴于存儲器,它可以持久化存儲有窮狀態(tài)自動機和與用例相關的可解析的畫面模板描述。包裝器的核心是自動機引擎,充當自動機解析器;狀態(tài)標識器可以標識當前狀態(tài),通過解析由遺留系統(tǒng)返回的畫面得到;終端模擬器實現(xiàn)了與遺留系統(tǒng)之間進行交互的終端類型的抽象。
包裝器的邏輯體系結構如圖1所示,展示了模塊及組件之間的協(xié)作關系以及交互之間的數(shù)據(jù)流動。
圖1 包裝器的邏輯體系結構
終端模擬器實現(xiàn)從遺留系統(tǒng)外部訪問的不同終端類型的抽象,可以通過系統(tǒng)提供的應用編程接口 (API)訪問遺留系統(tǒng)的功能,也可以通過用戶接口 (UI)或者是協(xié)議。不管終端的類型是什么,終端模擬器都會提供一個相應的編程接口,在遺留系統(tǒng)輸入/輸出的設備上進行標準的可執(zhí)行讀/寫操作,通過自動機引擎解析接口與遺留系統(tǒng)進行通信。
對遺留系統(tǒng)進行FSA 建模,在不同的交互狀態(tài)下狀態(tài)發(fā)生轉換,交互狀態(tài)與畫面模板相關聯(lián),狀態(tài)標識器的職責是將遺留系統(tǒng)返回的畫面狀態(tài)匹配相應的畫面模板。狀態(tài)標識器和自動機引擎組件通過異步通信的方式交換信息:自動機引擎發(fā)送當前的畫面描述 (從終端模擬器獲得)到狀態(tài)標識器,并且等待狀態(tài)標識器響應相應的交互狀態(tài)和畫面內容,包括在標簽中的存儲值,輸入和輸出域值。
包裝器的核心-自動機引擎 (AE),解析FSA 的描述并和其它包裝組件交換信息,協(xié)同與遺留系統(tǒng)之間的交互。自動機引擎的執(zhí)行由應用服務器發(fā)起,每一個服務在存儲器中存儲著相應的FSA 描述文檔,可以被AE解析。
由AE實現(xiàn)的活動圖如圖2所示,作為UML的活動圖包括3種基本狀態(tài):開始狀態(tài),解析狀態(tài)和最終狀態(tài)。
圖2 自動機引擎活動
開始狀態(tài) (start activity)包括以下行為:通過應用服務器接收服務請求消息,從存儲器中讀取相應的XML自動描述文件,一些預設的初始化行為 (包括緩存變量,也叫自動機變量)的執(zhí)行,通過終端模擬器接受遺留系統(tǒng)返回的畫面,通過狀態(tài)標識器組件獲得當前的交互狀態(tài)。
引擎進入解析狀態(tài) (interpretation activity),當當前狀態(tài)非最終狀態(tài)時,引擎執(zhí)行和當前用戶狀態(tài) (包括自動機變量和遺留系統(tǒng)的輸入/輸出域)相關聯(lián)的動作,提交新的輸入和執(zhí)行命令至遺留系統(tǒng),等待新交互狀態(tài)下的畫面的產(chǎn)生。當當前狀態(tài)與計算的最終狀態(tài)一致時,包裝器離開解析狀態(tài)進入最終狀態(tài) (final activity)。
最終狀態(tài) (final activity),包裝器以自動機變量存儲的數(shù)據(jù)為基準,組裝服務響應消息,并發(fā)送給應用服務器。
存儲器以持久化的方式存儲著FSA 的解析描述和由遺留系統(tǒng)提供的每一個服務的畫面模板描述。這些描述以XML文件的形式存儲,即FSA 的描述文檔。FSA 描述文檔的信息包括交互狀態(tài),狀態(tài)的轉換,畫面模板,由包裝器執(zhí)行的動作,以及緩存中間數(shù)據(jù)的自動機變量列表等。
Pine應用是一個基于面向流式終端的客戶端郵件應用的遺留系統(tǒng),允許用戶從已存在的郵件信箱里讀取、重組和管理Email消息,可以從中選取候選用例移植至SOA環(huán)境中。
在Pine應用提供的不同用例中,以移植 “Get Message”可復用服務的候選用例為例,將細粒度的Pine的 “Get Message”用例轉換成單個的Web服務。 “Get Message”用例允許郵箱的擁有者獲取給定的Email文件下特定的Email信息文本,為了使用此功能,系統(tǒng)為用戶提供了登錄的用戶名和密碼,可訪問的文件名以及可讀取的消息號。
本節(jié)將之前介紹的包裝器的設計方案應用于 “Get Message”用例移植過程的上下文中,移植過程包含下面的階段:選擇候選服務、包裝 “Get Message”用例、部署和驗證 “Get Message”用例。
這一階段決定遺留系統(tǒng)的哪一個用例可以作為服務,需要對用例的標準、方法和結構進行系統(tǒng)的分析,然后選擇候選服務。識別候選服務,需要考慮遺留系統(tǒng)的功能的復用性,粒度大小、狀態(tài)依賴性等因素。
“Get Message”用例的自動機圖形化表示如圖3所示,“Get Message”用例呈現(xiàn)7種不同的場景:其中3個對應成功消息的讀取,而另外4個對應失敗信息的讀取 (由錯誤的用戶密碼,空文件,不存在的文件,不存在的消息號引起的)。
這一階段包裝所選擇的 “Get Message”用例,包裝過程包括服務標識,逆向工程和包裝設計。
(1)服務標識分析決定候選用例是否轉變成單個高度一致的服務或者是一組服務, “Get Message”用例是包裝成單個的Web服務。
(2)對 “Get Message”候選用例進行逆向工程,黑盒分析收集遺留系統(tǒng)返回的畫面序列和交換的信息并進行分類,獲得畫面類型的集合和消息類型,進而構建 “Get Message”自動機。逆向工程的第一個輸出是 “Get Message”有窮狀態(tài)自動機,包括交互的狀態(tài)集,轉換,以及由轉換觸發(fā)的動作。第二個輸出是關聯(lián)每一個交互狀態(tài)的畫面模板,包括所有需要的畫面特征。第三個輸出是包裝“Get Message”服務的接口,通過服務請求消息提供給遺留系統(tǒng)的輸入變量集,通過服務響應消息獲取輸出變量。
逆向工程階段,系統(tǒng)的黑盒分析對與遺留系統(tǒng)進行交互的有窮狀態(tài)自動機進行抽象,這些分析由運行中的系統(tǒng)執(zhí)行,應用持久化存儲著不同的輸入數(shù)據(jù)和條件,能夠重新產(chǎn)生所有可能的用例交互場景。在分析期間,收集所有的信息表征這些交互,在分析的最后,F(xiàn)SA 模型產(chǎn)生,包含23個交互狀態(tài)和28個轉向,它由15種畫面模板 (關聯(lián)交互狀態(tài))表征,如圖3所示。在 “Get Message”用例中,畫面模板的數(shù)量低于交互狀態(tài)的數(shù)量,因為一些交互狀態(tài)(如17,18,19,20,21)由相同的畫面模板表征。
圖3 “Get Message”用例的自動機圖形化表示
服務接口包括以下輸入數(shù)據(jù):用戶認證數(shù)據(jù) (用戶名和密碼),包含信息的文件名,請求消息的普通序列號,輸出數(shù)據(jù)包含Email信息 (Date,from,To,Cc,Subject,Body)或者異常信息。
“Get Message”用例場景FSA 的描述如表1所示,前兩列是交互狀態(tài)的標識和描述,第三列是當前交互狀態(tài)將會被自動機引擎執(zhí)行的動作,第四列是提交動作的命令,最后一列表示從當前狀態(tài)可能達到的下一個狀態(tài)。自動機中存在5個狀態(tài),其下一可能轉向的狀態(tài)多于一個 (狀態(tài)號分別是2,5,9,13,14)。自動機變量,定義存儲了4個請求消息的域的11 個變量以及7 個響應消息的域(Date,from,To,Cc,Subject,Body,Exception)。
(3)包裝設計的目標是使得交互模型可以被自動機引擎解析,自動機解析后信息模型必須被翻譯成XML格式并且存儲在存儲器中。
這一階段,將包裝的服務使用特定的商業(yè)或者開源Web服務器部署。當包裝后的服務以Web 服務發(fā)布后,WSDL文檔中的請求消息中包含的輸入數(shù)據(jù)和響應消息中包含的輸出數(shù)據(jù)將會被存儲到Web服務器中,同時服務的UDDI在公共的UDDI存儲目錄上存儲。服務在Web服務器部署完成后,需要提交包裝功能的服務至驗證活動,驗證是在服務執(zhí)行的過程中測試由于自動機的設計缺陷可能出現(xiàn)的狀態(tài)標識異常和不可預料的響應。
基于FSA 模型的分析,設計用例測試每一個不依賴的自動機路徑。表2所示的測試用例覆蓋 “Get Message”用例的場景,包含覆蓋場景的描述和相應的線性獨立的FSA圖交互狀態(tài)路徑集。通過對測試用例的分析檢測畫面模板和自動機描述中的錯誤。
本文提出了一種基于有窮狀態(tài)自動機描述的黑盒Web遺留系統(tǒng)的服務化包裝方案,給出了包裝方案的參考模型,對模型內的主要包裝組件:自動機引擎,終端模擬器以及狀態(tài)標識器的功能進行了描述。此外,基于此方案將包裝“Get Message”用例應用于移植的上下文環(huán)境,進而驗證方案的可行性,為包裝Web遺留系統(tǒng)的功能提供了理論參考。本文的工作還有待進一步完善,比如包裝后服務質量(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網(wǎng)建模和服務質量分析的研究 [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).[劉陽.系統(tǒng)集成基于聯(lián)邦的Agent包裝模型的研究與實現(xiàn) [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).[王德俊.面向服務的分布式系統(tǒng)動態(tài)更新研究 [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).[汪敏.遺產(chǎn)系統(tǒng)Web服務化封裝工具的研究與實現(xiàn).西安:西安電子科技大學,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.