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