張?zhí)煨?/p>
(福建船政交通職業(yè)學(xué)院,福州350007)
數(shù)字化校園管理是以計(jì)算機(jī)網(wǎng)絡(luò)和信息數(shù)字化技術(shù)為基礎(chǔ),通過大量的有針對(duì)性的應(yīng)用軟件建立起來的一個(gè)用于滿足各類校園業(yè)務(wù)管理的大型計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)。但其服務(wù)應(yīng)用支撐軟件開發(fā)和項(xiàng)目實(shí)施過程常碰到以下問題:
首先,業(yè)務(wù)和程序捆綁得較為緊密,大多數(shù)開發(fā)人員仍然適應(yīng)那種將每一個(gè)應(yīng)用程序作為一個(gè)獨(dú)立問題解決的方式。
其次,大量異構(gòu)系統(tǒng)并存,不同計(jì)算機(jī)硬件工作方式不同,操作系統(tǒng)不同、編程語言也不同;系統(tǒng)內(nèi)或系統(tǒng)間的接口不統(tǒng)一,系統(tǒng)一旦變大或變多則接口變得異常復(fù)雜,維護(hù)和升級(jí)的成本很高。
再次,在早期設(shè)計(jì)概念中,只包括構(gòu)件(也稱模塊)以及一些基本的模塊互聯(lián)機(jī)制,隨著軟件開發(fā)實(shí)踐,構(gòu)件間的互聯(lián)機(jī)制逐漸獨(dú)立出來[1]。傳統(tǒng)的點(diǎn)對(duì)點(diǎn)應(yīng)用連接方式將最終造成數(shù)字化校園管理架構(gòu)蛛網(wǎng)化,伴隨而來的是復(fù)雜僵化的應(yīng)用架構(gòu)、高額的維護(hù)成本和緩慢的服務(wù)響應(yīng)速度。
通過深入分析以上問題,作者按照軟件體系架構(gòu)的思想來梳理軟件開發(fā)工作方式,引入合適的集成方式和構(gòu)件設(shè)計(jì)規(guī)約,利用服務(wù)組件架構(gòu)(SCA,Service Component Architecture)標(biāo)準(zhǔn)來開發(fā)數(shù)字化校園管理服務(wù)控制系統(tǒng),使其成為面向校園管理各類應(yīng)用服務(wù)架構(gòu) (SOA,Service Oriented Architecture)的信息傳輸龍骨,能夠幫助簡(jiǎn)化IT架構(gòu)(減少應(yīng)用整合接口的數(shù)量和復(fù)雜程度),降低運(yùn)作成本。
面向服務(wù),本質(zhì)就是以服務(wù)協(xié)同為中心,組織好各種服務(wù)間的工作[2]。
從數(shù)字化校園管理應(yīng)用軟件系統(tǒng)項(xiàng)目特點(diǎn)來看,教務(wù)管理、學(xué)籍管理、教學(xué)資源管理、招生熱線管理、數(shù)字化圖書館等外部服務(wù)形式主要體現(xiàn)為Web服務(wù),HTTP Servlet服務(wù),CORBA服務(wù)、Tuxedo服務(wù)、數(shù)據(jù)庫表接口和存儲(chǔ)過程接口等。服務(wù)控制系統(tǒng)需要將這些服務(wù)通過適配器集成到服務(wù)運(yùn)行構(gòu)件中,并提供統(tǒng)一的服務(wù)接口供外部調(diào)用,通過不斷豐富其應(yīng)用適配功能,不斷開發(fā)新的面向典型應(yīng)用的組建標(biāo)準(zhǔn),使得用戶通過簡(jiǎn)單的配置就可以將已有的各種應(yīng)用遺留系統(tǒng)和新開發(fā)的應(yīng)用系統(tǒng)集成到服務(wù)控制系統(tǒng)上來。
該服務(wù)控制系統(tǒng)支持服務(wù)交互功能,提供消息傳遞功能,并以事件基礎(chǔ)架構(gòu)來支持這些功能。還提供合適的服務(wù)級(jí)別和可管理性,支持在異構(gòu)環(huán)境中的組合應(yīng)用。依據(jù)SOA原則,需要使用與實(shí)現(xiàn)無關(guān)的接口,被調(diào)用的服務(wù)位置對(duì)于調(diào)用者應(yīng)該是透明的,需要支持可互操作性的通信協(xié)議,同時(shí)可以進(jìn)行相對(duì)粗粒度的、支持重用封裝的服務(wù)定義,可以作為分布式的異構(gòu)基礎(chǔ)架構(gòu)進(jìn)行實(shí)現(xiàn)。在框架模型中,構(gòu)件根據(jù)承擔(dān)責(zé)任角度分為功能構(gòu)件和連接構(gòu)件,業(yè)務(wù)過程的擴(kuò)展體現(xiàn)在連接構(gòu)件中,同時(shí)連接構(gòu)件負(fù)責(zé)功能構(gòu)件之間的交互[3],服務(wù)控制系統(tǒng)就起到了連接構(gòu)件的作用。在系統(tǒng)中被集成的對(duì)象明確被定義為服務(wù),而不是傳統(tǒng)EAI中各種各樣的中間件系統(tǒng),明確強(qiáng)調(diào)消息處理在集成過程中的核心作用,而且事件驅(qū)動(dòng)成為重要特征[4]。
對(duì)應(yīng)于SCA的概念,服務(wù)控制系統(tǒng)主要發(fā)揮服務(wù)注冊(cè)中心以及服務(wù)通道的作用,按主要功能分為4部分,如圖1。
圖1 服務(wù)控制系統(tǒng)架構(gòu)
1.2.1 服務(wù)配置管理
服務(wù)配置管理主要實(shí)現(xiàn)將開發(fā)好的應(yīng)用服務(wù)注冊(cè)在系統(tǒng)可引用的配置文件中。服務(wù)配置使用XML來描述服務(wù)的引用位置,這保證了軟件系統(tǒng)在運(yùn)行過程支持在線演化,即意味著軟件在運(yùn)行期間隨著配置參數(shù)改變則各個(gè)服務(wù)能被方便地增加、刪除[5]。
服務(wù)配置XML文件的最基本結(jié)構(gòu)如圖2所示,包括服務(wù)的聲明、輸入/輸出端定義和服務(wù)這程序的位置。
圖2 服務(wù)配置文件結(jié)構(gòu)
1.2.2 服務(wù)安全管理
數(shù)字化校園管理的應(yīng)用軟件,很多對(duì)應(yīng)用的訪問是要進(jìn)行安全控制的。針對(duì)這一普遍需求,在系統(tǒng)設(shè)計(jì)了服務(wù)安全管理功能。
服務(wù)安全管理主要是實(shí)現(xiàn)安全配置,分布在各處的服務(wù)經(jīng)常被遠(yuǎn)程調(diào)用,服務(wù)組件本身必須實(shí)現(xiàn)安全設(shè)計(jì)來完成服務(wù)調(diào)用者驗(yàn)證等工作。本系統(tǒng)采用的安全策略是應(yīng)用Spring Security對(duì)服務(wù)訪問進(jìn)行控制。
數(shù)字化校園管理許多應(yīng)用服務(wù)需要針對(duì)服務(wù)本身的動(dòng)態(tài)特征提出訪問控制要求,即需要對(duì)用戶的各類角色設(shè)置權(quán)限。因此,安全配置設(shè)計(jì)采用Spring框架下的Spring Security相關(guān)組件作為安全管理組件,服務(wù)數(shù)據(jù)交換的 Mule系統(tǒng)也使用Spring Security。通過安全管理,可以在HTTP的輸入端(inbound)對(duì)用戶進(jìn)行認(rèn)證,配置組件的訪問權(quán)限。
Spring Security是通過Servlet Fileter的方式嵌入整個(gè)Web應(yīng)用,可以進(jìn)行用戶認(rèn)證和權(quán)限控制的管理,從而提供一種統(tǒng)一的跨應(yīng)用系統(tǒng)的安全管理。當(dāng)用戶訪問資源的時(shí)候,就會(huì)被相關(guān)的過濾器所攔截,進(jìn)行用戶認(rèn)證和權(quán)限判斷。
在具體設(shè)計(jì)中通過配置安全元素、配置組件訪問權(quán)限以及通過攔截器阻擋非法訪問來實(shí)現(xiàn)服務(wù)的安全訪問。同時(shí),結(jié)合最常用的WebService方法,配置了CXF。
1.2.3 服務(wù)監(jiān)控
服務(wù)監(jiān)控用于確定監(jiān)控類型和被監(jiān)控的服務(wù)執(zhí)行過程數(shù)據(jù)內(nèi)容,通過圖形界面完成服務(wù)運(yùn)行過程的監(jiān)控瀏覽,主要實(shí)現(xiàn)實(shí)時(shí)事件監(jiān)控和歷史事件查詢。
本系統(tǒng)開發(fā)了一個(gè)管理控制器實(shí)現(xiàn)對(duì)服務(wù)構(gòu)件運(yùn)行過程的監(jiān)控,通過管理控制臺(tái)實(shí)現(xiàn)對(duì)服務(wù)注冊(cè)、服務(wù)調(diào)用身份登記、服務(wù)過程的監(jiān)控等,實(shí)現(xiàn)服務(wù)注冊(cè)、服務(wù)調(diào)用身份的增刪改查,以及上述安全設(shè)計(jì)。定制輪巡周期實(shí)現(xiàn)主動(dòng)發(fā)現(xiàn)注冊(cè)的服務(wù)構(gòu)件是否可達(dá)。監(jiān)控服務(wù)構(gòu)件運(yùn)行過程信息,即將存于運(yùn)行日志庫的監(jiān)控信息通過界面展示,對(duì)于異常信息進(jìn)行提示。
在服務(wù)運(yùn)行過程實(shí)現(xiàn)便捷的可視化監(jiān)控,既是了解服務(wù)是否穩(wěn)定運(yùn)行的需要也是前期調(diào)試服務(wù)的必須。本監(jiān)控設(shè)計(jì)包括2部分,即如何將必要的監(jiān)控事件入庫保存和如何顯示這些監(jiān)控信息。前者又主要包括2類監(jiān)控事件;一是服務(wù)系統(tǒng)的運(yùn)行情況,如服務(wù)是否被成功調(diào)用;二是服務(wù)組件本身執(zhí)行過程的日志。對(duì)于監(jiān)控信息的顯示設(shè)計(jì),考慮到實(shí)時(shí)信息數(shù)量可能會(huì)很多,因此設(shè)計(jì)了“事件讀取狀態(tài)”(點(diǎn)擊記錄讀取信息內(nèi)容后該記錄被標(biāo)記為讀取)方便監(jiān)控者從大量信息中關(guān)注新出現(xiàn)記錄。
1.2.4 服務(wù)數(shù)據(jù)交換
服務(wù)數(shù)據(jù)交換主要負(fù)責(zé)服務(wù)數(shù)據(jù)的底層交換,此處引用開源共享技術(shù)來實(shí)現(xiàn),完成對(duì)不同協(xié)議數(shù)據(jù)格式的轉(zhuǎn)義、過濾等處理。
在服務(wù)控制系統(tǒng)應(yīng)用過程,主要分為服務(wù)準(zhǔn)備、服務(wù)發(fā)布、服務(wù)調(diào)用3個(gè)階段:
1)服務(wù)準(zhǔn)備。根據(jù)業(yè)務(wù)應(yīng)用需求和運(yùn)行環(huán)境完成應(yīng)用服務(wù)的制作,包括服務(wù)邏輯設(shè)計(jì)、服務(wù)編寫與編譯、可調(diào)用的接口設(shè)定。
2)服務(wù)發(fā)布。將業(yè)務(wù)應(yīng)用服務(wù)在配置文件中寫明可調(diào)用的位置,有特定要求的(如安全調(diào)用)需要在配置中說明,然后在服務(wù)控制系統(tǒng)中予以發(fā)布。
3)服務(wù)調(diào)用。將業(yè)務(wù)應(yīng)用服務(wù)的可調(diào)用接口情況提供給調(diào)用者,完成調(diào)用界面的設(shè)計(jì),包括正常以及異常信息的顯示;調(diào)用過程中,在服務(wù)控制系統(tǒng)的服務(wù)監(jiān)控模塊可查詢服務(wù)執(zhí)行日志,了解服務(wù)運(yùn)行情況。
根據(jù)數(shù)字化校園管理信息門戶工作方式的需要,構(gòu)建面向用戶的服務(wù)模式時(shí),需要將應(yīng)用服務(wù)基于Poetlet技術(shù),實(shí)現(xiàn)統(tǒng)一信息門戶,有效實(shí)現(xiàn)校園各類應(yīng)用服務(wù)異構(gòu)系統(tǒng)的整合。
為適應(yīng)異構(gòu)環(huán)境,本系統(tǒng)選用Java作為開發(fā)語言,將XML作為數(shù)據(jù)格式語言用于服務(wù)配置的定義、數(shù)據(jù)傳遞等。
研發(fā)運(yùn)行環(huán)境選擇PC服務(wù)器作為硬件系統(tǒng),數(shù)據(jù)庫系統(tǒng)選擇Oracle10g,服務(wù)數(shù)據(jù)交換選用開源系統(tǒng)MULE,目前版本為2.1.1。
本系統(tǒng)采用的MULE作為一個(gè)基于Java的輕量級(jí)消息框架,可以快速地將服務(wù)應(yīng)用連接起來,并且確保在這些應(yīng)用間交換不同協(xié)議的數(shù)據(jù)。MULE是遵循面向服務(wù)架構(gòu)(SOA)的系統(tǒng),它提供了對(duì)現(xiàn)有系統(tǒng)的簡(jiǎn)潔集成方式,即可以集成JMS、Web Service、JDBC、HTTP 甚至其他的技術(shù)。MULE的可擴(kuò)展性框架允許開發(fā)者逐步將更多的應(yīng)用連接到它的系統(tǒng),而且Mule透明地管理組件間的所有交互,不管這些組件在底層使用了怎樣的傳輸協(xié)議,都可以利用在多個(gè)應(yīng)用間讀取、轉(zhuǎn)換和發(fā)送數(shù)據(jù)的消息框架來解決這一問題。
根據(jù)SCA的模型框架,本文將服務(wù)定義為由服務(wù)組件、服務(wù)輸入端和服務(wù)輸出端3部分組成,如圖3。
圖3 服務(wù)定義
形成的服務(wù)配置信息示例:
基于Java的實(shí)現(xiàn)所提供的服務(wù),可以有一個(gè)按下列方法之一定義的接口:1)Java接口;2)Java類。
產(chǎn)生自Web Services Description Language(WSDL)portType的Java接口,Java實(shí)現(xiàn)類必須實(shí)現(xiàn)服務(wù)接口定義的所有操作,如果服務(wù)接口是用一個(gè)Java接口定義的,那么基于Java的構(gòu)件要么實(shí)現(xiàn)此Java接口,要么實(shí)現(xiàn)接口的所有操作。
由Java類定義接口的服務(wù)(與Java接口相對(duì))不是遠(yuǎn)程的。產(chǎn)生自WSDL portType的Java接口是遠(yuǎn)程的,于此實(shí)現(xiàn)的組件類型的XML描述如下:
端點(diǎn)的傳輸類型有 WebService(CXF)、File、HTTP、HTTPS、TCP、FTP等多種形式。不同方式傳輸時(shí),作為輸入/輸出端的屬性設(shè)置不同。其中常用的 WebService(CXF)是一個(gè)高性能的 Web-Service,同時(shí)還支持多種綁定,CXF比較適合創(chuàng)建各種不同傳輸協(xié)議的服務(wù)。
下面以一個(gè)“Hello響應(yīng)”作為簡(jiǎn)單示例對(duì)以上的服務(wù)配置和應(yīng)用進(jìn)行說明。
1)服務(wù)端。代碼包括3個(gè)部分:
服務(wù)接口,一個(gè)Java的Interface(HelloSvc.java);
服務(wù)實(shí)現(xiàn),HelloService接口的實(shí)現(xiàn)類(HelloSvcImpl.java);
SCA的服務(wù)組件配置文件,HelloSvc.composite,主體如下:
2)客戶端。對(duì)于客戶端的調(diào)用代碼,客戶端需要知道服務(wù)端組件提供了什么服務(wù),實(shí)現(xiàn)了什么Java接口,而不需要接口后面的實(shí)現(xiàn)細(xì)節(jié)。
服務(wù)控制系統(tǒng)只是一個(gè)基礎(chǔ),需要通過應(yīng)用場(chǎng)景進(jìn)行驗(yàn)證。為了驗(yàn)證以上服務(wù)控制系統(tǒng)的可用性,設(shè)計(jì)一個(gè)簡(jiǎn)單的“用戶信息管理(Custmos-Manage)”應(yīng)用服務(wù)作為測(cè)試用例。采用的“用戶信息管理”系統(tǒng),是在數(shù)字化校園管理應(yīng)用軟件中具有典型信息服務(wù)操作的小型管理系統(tǒng),其應(yīng)用模塊都采用目前在業(yè)務(wù)開發(fā)中較常見的網(wǎng)頁方式。該系統(tǒng)需要達(dá)成如下驗(yàn)證目標(biāo):
1)服務(wù)配置信息須成功被讀取,被調(diào)用服務(wù)須被成功執(zhí)行;
2)服務(wù)運(yùn)行過程監(jiān)控信息須成功被保存、讀??;
3)服務(wù)安全配置須成功被執(zhí)行。
“用戶信息管理”(CustmosManage)主要采用B/S模式開發(fā),并調(diào)用后端的服務(wù)。在B/S的服務(wù)端采用JSP的方式提供界面訪問以及調(diào)用后臺(tái)的應(yīng)用服務(wù),Web應(yīng)用服務(wù)器采用Apache Tomcat。應(yīng)用服務(wù)配置在服務(wù)控制系統(tǒng)內(nèi),以 Web Service的方式提供,采用Java開發(fā),數(shù)據(jù)庫使用Oracle10g。用例系統(tǒng)架構(gòu)如圖4。
用于服務(wù)調(diào)用的安全設(shè)計(jì),在 Web服務(wù)器層面,采用Spring Security的安全管理模式,進(jìn)行Web應(yīng)用的登錄認(rèn)證。登錄認(rèn)證成功,才能進(jìn)行后繼的操作和服務(wù)調(diào)用。對(duì)于WebService應(yīng)用,則采用WS-Security的安全認(rèn)證。
經(jīng)測(cè)試驗(yàn)證,通過Web頁面完成用戶登錄和各項(xiàng)服務(wù)調(diào)用,測(cè)試服務(wù)全部通過,在服務(wù)監(jiān)控界面可查到的日志信息如圖5。
圖4 用例架構(gòu)
圖5 客戶信息服務(wù)組件執(zhí)行日志顯示
通過事件查看器查看到的監(jiān)控信息如圖6。
圖6 客戶信息服務(wù)調(diào)用監(jiān)控日志顯示
數(shù)字化校園管理應(yīng)用服務(wù),由于功能需求與組織結(jié)構(gòu)的不同,硬件環(huán)境與軟件設(shè)計(jì)都存在很大的個(gè)性化與差異性,本系統(tǒng)以應(yīng)用為核心,以數(shù)據(jù)為基礎(chǔ),以信息服務(wù)為表現(xiàn),按照“服務(wù)型”主線,將各類應(yīng)用服務(wù)基于SCA架構(gòu),通過適配器把這些服務(wù)集成到服務(wù)運(yùn)行構(gòu)件中,并提供統(tǒng)一的服務(wù)接口供外部調(diào)用。
在實(shí)際運(yùn)行中,數(shù)字化校園管理產(chǎn)生的其他應(yīng)用服務(wù)都可以參考“用戶信息管理”系統(tǒng)用例架構(gòu)模式,利用本系統(tǒng)來實(shí)現(xiàn)信息門戶統(tǒng)一配置服務(wù)的服務(wù)控制管理,有效解決系統(tǒng)集成、信息整合和個(gè)性化信息服務(wù)等問題。經(jīng)過實(shí)驗(yàn)證明,本文研究的服務(wù)控制系統(tǒng)是有效可行的。
[1]梅宏,申峻嶸.軟件體系結(jié)構(gòu)研究進(jìn)展[J].軟件學(xué)報(bào),2006,17(6):1257-1275.
[2]馬曉星,余萍,陶先平,等.一種面向服務(wù)的動(dòng)態(tài)協(xié)同架構(gòu)及其支撐系統(tǒng) [J].計(jì)算機(jī) 學(xué)報(bào),2005,28(4):467-477.
[3]麻志毅,陳泓婕.一種面向服務(wù)的體系結(jié)構(gòu)參考模型[J].計(jì)算機(jī)學(xué)報(bào),2006,29(7):1011-1019.
[4]張廣勝,蔣昌俊,湯憲飛,等.面向服務(wù)的企業(yè)應(yīng)用集成系統(tǒng)描述與驗(yàn)證[J].軟件學(xué)報(bào),2007,18(12):3015-3030.
[5]王曉鵬,王千祥,梅宏.一種面向構(gòu)件化軟件的在線演化方法[J].計(jì)算機(jī)學(xué)報(bào),2005,28(11):1890-1897.