余 亮 張 軒
(中國電子科技集團(tuán)公司第二十八研究所 南京 210007)
傳統(tǒng)的軟件集成技術(shù)所開發(fā)出來的業(yè)務(wù)軟件都是緊耦合的,當(dāng)用戶需求變化的時候,需要花費(fèi)很長的周期去調(diào)整業(yè)務(wù)軟件,軟件的復(fù)用程度低,導(dǎo)致用戶需求響應(yīng)時間非常長,而且業(yè)務(wù)軟件的任何一部分出現(xiàn)問題,都會導(dǎo)致整個業(yè)務(wù)軟件無法正常進(jìn)行。
基于J2EE架構(gòu)的構(gòu)件化集成技術(shù)采用標(biāo)準(zhǔn)的構(gòu)件規(guī)范,將整個系統(tǒng)拆分成一定數(shù)量的構(gòu)件,構(gòu)件又按照技術(shù)的角度進(jìn)行分層,而且保證構(gòu)件和構(gòu)件是松耦合的,構(gòu)件和構(gòu)件之間通過裝配的方式組合在一起,能夠快速、靈活實(shí)現(xiàn)用戶的業(yè)務(wù)需求。
一般地說,軟件構(gòu)件是一種軟件單元,它實(shí)現(xiàn)了解決某一領(lǐng)域問題的一些功能,并且用環(huán)境接口隱藏了這些功能的實(shí)現(xiàn)方法,構(gòu)件一般應(yīng)具備以下幾個基本特征。
·復(fù)用性:復(fù)用是軟件構(gòu)件最基本的性質(zhì),只有可以被復(fù)用的構(gòu)件才有其存在的價值;同時為了提高軟件系統(tǒng)的開發(fā)速度和質(zhì)量,只有容易被復(fù)用的構(gòu)件才有其應(yīng)用的需求。因此,復(fù)用應(yīng)該具有可復(fù)用性和易復(fù)用性兩層含義。
·封裝性:構(gòu)件封裝可以對外界隱藏設(shè)計和實(shí)現(xiàn)細(xì)節(jié),僅通過接口與外界交換信息。以接口和接口定義語言為主要內(nèi)容的構(gòu)件交互機(jī)制實(shí)現(xiàn)了描述與實(shí)現(xiàn)的分離。對于構(gòu)件,封裝應(yīng)該滿足構(gòu)件內(nèi)部的功能實(shí)現(xiàn)是緊禍合的,構(gòu)件之間的關(guān)系是松耦合的,這可以保證構(gòu)件功能復(fù)用的完整性和構(gòu)件開發(fā)及交付的獨(dú)立性。
·組裝性:構(gòu)件通過組裝可以實(shí)現(xiàn)更大的實(shí)體,組裝時實(shí)施復(fù)用的手段。這一點(diǎn)與傳統(tǒng)的復(fù)用技術(shù)有著顯著的區(qū)別。
·自治性:構(gòu)件必須能夠獨(dú)立分布和獨(dú)立運(yùn)行,它是內(nèi)含識別其屬性、存取方法和事件等信息的黑盒。類似特征是構(gòu)件獨(dú)立性、構(gòu)件的字包含。
·粗粒度性:構(gòu)件應(yīng)該代表一定獨(dú)立的服務(wù)功能,是企業(yè)級應(yīng)用系統(tǒng)的一個有效部件,具有粗粒度性。
·接口連接機(jī)制:以契約性接口和外部環(huán)境相連接,接口是對構(gòu)件外部特征的唯一抽象。
基于構(gòu)件的集成方法是按照滿足預(yù)先定義的功能要求將構(gòu)件集成到應(yīng)用系統(tǒng)的過程。每個構(gòu)件提供服務(wù)并向其它構(gòu)件請求服務(wù),因此,構(gòu)件接口定義成為關(guān)注的焦點(diǎn)。根據(jù)構(gòu)件之間的交互和與周圍基礎(chǔ)設(shè)施的相關(guān)性可以將接口類型分為:
·應(yīng)用程序接口:這些接口定義了與其它構(gòu)件的交互作用,它們描述了與其它構(gòu)件交互的導(dǎo)入/導(dǎo)出關(guān)系。導(dǎo)出接口描述了構(gòu)件所提供的功能,導(dǎo)入接口描述構(gòu)件了構(gòu)件從其它構(gòu)件所需求的功能。這種接口層次稱為“水平通道”。
·平臺接口:這些接口定義了構(gòu)件與它所運(yùn)行的平臺之間的交互作用,包括操作系統(tǒng)調(diào)用、基礎(chǔ)的硬件技術(shù)及通信系統(tǒng)。因?yàn)?,一個構(gòu)件要運(yùn)行,必須有特定的處理器、內(nèi)存、通信設(shè)備和其他硬件設(shè)備支持。這種交互類型與上一種交互類型同樣重要。它決定了構(gòu)件是否可以運(yùn)行及如何運(yùn)行。這種層次方法能夠幫助設(shè)計者規(guī)約和設(shè)計出獨(dú)立于程序設(shè)計語言和操作系統(tǒng)的構(gòu)件。一些實(shí)現(xiàn)可以有不同的平臺接口,但要有相同的設(shè)計規(guī)約。這種接口層次稱為“垂直通道”。
·構(gòu)件接口定義模型:構(gòu)件的特性對于有效管理和使用構(gòu)件是相當(dāng)重要的,構(gòu)件接口定義模型提供了一個用于開發(fā)、管理和使用構(gòu)件的基礎(chǔ)。它分為三個層次,底部是一個構(gòu)件的基調(diào)(signature)描述,它形成了一個構(gòu)件與外界聯(lián)系的基礎(chǔ),包括所需的機(jī)制(如交互),表征了構(gòu)件的功能;第二層是根據(jù)應(yīng)用對構(gòu)件基調(diào)的限制,即使用構(gòu)件要在一定的限定條件下,構(gòu)件的基調(diào)和限定條件包含了對構(gòu)件所有能力的定義;第三層是根據(jù)構(gòu)件在給定應(yīng)用場景中角色對接口基調(diào)的包裝,根據(jù)應(yīng)用語境的不同,構(gòu)件接口可以有不同的配置;構(gòu)件接口的第四個方面是根據(jù)構(gòu)件的非功能屬性確定構(gòu)件的特性,它可以與基調(diào)和配置交互。
面向構(gòu)件的軟件開發(fā)方法(CBD)的目標(biāo)是創(chuàng)建可復(fù)用構(gòu)件集,以用于基于構(gòu)件的應(yīng)用系統(tǒng),使得應(yīng)用程序的開發(fā)變成了對構(gòu)件的挑選、適配、組裝的過程。大多數(shù)情況下,構(gòu)件不是拿來就用,構(gòu)件需要做某種方式的修改以便與其它構(gòu)件相匹配。更改構(gòu)件以適應(yīng)特定應(yīng)用系統(tǒng)的過程稱為構(gòu)件匹配。適配方法一般分為三類:類型適配,接口適配,行為適配。
1)類型適配。類型適配發(fā)生在抽象或一般問題特定化時,這種類型的適配通常由基調(diào)匹配工具來完成,它經(jīng)常與其它適配類型結(jié)合使用。例如,當(dāng)提取的構(gòu)件與問題的基調(diào)不匹配,需要調(diào)整接口的類型時,就需要類型適配方法了,另外,在組合構(gòu)件適配時,需要支持部分接口匹配時,也需要類型匹配的方法。類型適配保證構(gòu)件在不同的環(huán)境中提供所有或有限制的適配。
2)接口適配。接口適配決定構(gòu)件如何復(fù)用以適應(yīng)問題規(guī)約,接口適配的一種常用方式是類型轉(zhuǎn)換,通過一個包裝器對源構(gòu)件進(jìn)行類型轉(zhuǎn)換形成滿足問題規(guī)約的目標(biāo)構(gòu)件。
3)行為適配。構(gòu)件的功能是構(gòu)件在特定環(huán)境中所表現(xiàn)出的行為,特別是在與其它構(gòu)件進(jìn)行交互時的行為體現(xiàn),構(gòu)件的功能可以通過對其行為進(jìn)行限制來達(dá)到定制的目的,也可以擴(kuò)充其行為而達(dá)到擴(kuò)充功能的目的;另外,可以對幾個相關(guān)的構(gòu)件按照它們的交互關(guān)系進(jìn)行不同類型的組合(如順序組合、并行組合、選擇組合等),可以彌補(bǔ)單一構(gòu)件功能缺乏的問題,當(dāng)問題規(guī)約不能由一個單一構(gòu)件來匹配時,就可以利用行為適配方法對構(gòu)件實(shí)施不同方式的組合以滿足問題規(guī)約的要求。
構(gòu)件規(guī)范解決最基本的構(gòu)件定義問題,分層的構(gòu)件技術(shù)架構(gòu)通過將業(yè)務(wù)軟件分層,在每一層提供可復(fù)用的構(gòu)件,構(gòu)件和構(gòu)件之間通過松耦合的方式實(shí)現(xiàn)交互,同時可以針對每一個構(gòu)件提供相應(yīng)的監(jiān)控和運(yùn)維管理,幫助提高系統(tǒng)的可維護(hù)性和穩(wěn)定性。
要實(shí)現(xiàn)構(gòu)件化集成,首先要解決構(gòu)件的規(guī)范定義問題,J2EE架構(gòu)下的構(gòu)件采用國際標(biāo)準(zhǔn)進(jìn)行定義,如圖1所示。
圖1 構(gòu)件規(guī)范定義圖
構(gòu)件是以契約化的接口提供服務(wù)的功能單元,符合一定標(biāo)準(zhǔn)可替換的程序模塊,是對自治的業(yè)務(wù)概念或業(yè)務(wù)過程的軟件實(shí)現(xiàn)。構(gòu)件可以分為原子構(gòu)件和復(fù)合構(gòu)件兩種。原子構(gòu)件是一個功能實(shí)現(xiàn)單元,是對功能實(shí)現(xiàn)的邏輯封裝,原子構(gòu)件是構(gòu)件的一種,除了具備構(gòu)件的基本特征外,還具備了實(shí)現(xiàn)的特征。所封裝的實(shí)現(xiàn)可以是具體的Java類,也可以是另外一個構(gòu)件的實(shí)現(xiàn)。復(fù)合構(gòu)件是構(gòu)件的一種,它是一個執(zhí)行單元,一個復(fù)合構(gòu)件由一個或多個原子構(gòu)件組成。服務(wù)是構(gòu)件所提供業(yè)務(wù)功能的具體表現(xiàn),通過接口定義一組操作。每個構(gòu)件可以定義多個服務(wù)。屬性是運(yùn)行期需要使用到的配置,是運(yùn)行期依賴的參數(shù),每個構(gòu)件有多個屬性。引用是構(gòu)件在運(yùn)行期需要使用其他構(gòu)件提供的服務(wù),通過引用,實(shí)現(xiàn)了構(gòu)件與構(gòu)件之間的松耦合。原子構(gòu)件的功能實(shí)現(xiàn)包括多種方式:Java實(shí)現(xiàn)、Spring實(shí)現(xiàn)、其他復(fù)合構(gòu)件實(shí)現(xiàn)等,實(shí)現(xiàn)方式支持?jǐn)U展。
在構(gòu)件規(guī)范定義的基礎(chǔ)上,分層的構(gòu)件技術(shù)架構(gòu)通過將業(yè)務(wù)軟件分層,在每一層提供可復(fù)用的構(gòu)件,構(gòu)件和構(gòu)件之間通過松耦合的方式實(shí)現(xiàn)交互,同時可以針對每一個構(gòu)件提供相應(yīng)的監(jiān)控和運(yùn)維管理,幫助提高系統(tǒng)的可維護(hù)性和穩(wěn)定性。如圖2所示。
圖2 基于構(gòu)件的技術(shù)框架
分層的構(gòu)件技術(shù)框架由構(gòu)件包、構(gòu)件運(yùn)行服務(wù)、J2EE平臺、集成技術(shù)構(gòu)件、支撐環(huán)境組成。
業(yè)務(wù)軟件被切分成構(gòu)件包的形式,一個構(gòu)件包相當(dāng)于一個可單獨(dú)部署的業(yè)務(wù)功能,構(gòu)件包中內(nèi)部或者構(gòu)件包之間通過數(shù)據(jù)上下文進(jìn)行數(shù)據(jù)交互,構(gòu)件包可以使用基礎(chǔ)技術(shù)構(gòu)件和集成技術(shù)構(gòu)件來裝配自己的業(yè)務(wù)構(gòu)件;
數(shù)據(jù)上下文用于實(shí)現(xiàn)構(gòu)件包內(nèi)部各層次之間或者多個構(gòu)件包之間的數(shù)據(jù)交互;
構(gòu)件包是一個物理的部署單元,有且只有一個復(fù)合構(gòu)件,同時包括相關(guān)的其他資源文件;構(gòu)件包可以將小粒度的構(gòu)件復(fù)合成大粒度的構(gòu)件;構(gòu)件包是可以獨(dú)立發(fā)布的功能單元,具有大粒度特性;構(gòu)件包之間可以建議引用或者依賴的關(guān)系。如圖3所示。
圖3 構(gòu)件包邏輯模型
基于J2EE架構(gòu)的構(gòu)件集成技術(shù)支持構(gòu)件之間通過裝配的形式組合在一起,實(shí)現(xiàn)具體的業(yè)務(wù)軟件。如圖4所示。
圖4 構(gòu)件集成裝配模型
通過構(gòu)件化集成技術(shù),可以實(shí)現(xiàn)以下能力:
使用這樣的構(gòu)件集成裝配模型,開發(fā)者能夠更加容易、更加迅速的通過構(gòu)件和構(gòu)件之間的裝配,開發(fā)出滿足用戶需求的業(yè)務(wù)軟件。當(dāng)用戶需求發(fā)生變化的時候,也只需要修改其中的一部分構(gòu)件就行了,大大縮短了用戶需求響應(yīng)時間。
基于J2EE架構(gòu)的構(gòu)件化集成技術(shù)中,構(gòu)件和構(gòu)件之間是松耦合的,針對每個獨(dú)立的構(gòu)件都提供了一整套部署、監(jiān)控、運(yùn)維功能,能夠?qū)崟r的針對構(gòu)件進(jìn)行健康狀態(tài)監(jiān)控,及時發(fā)現(xiàn)可能存在問題的構(gòu)件;當(dāng)一個構(gòu)件出現(xiàn)問題的時候,可以將該構(gòu)件從業(yè)務(wù)系統(tǒng)中屏蔽出去,保證它的問題不會影響其他業(yè)務(wù)軟件功能的運(yùn)行。
構(gòu)件技術(shù)經(jīng)過了較長時間的發(fā)展,其技術(shù)本身較為成熟;松耦合的標(biāo)準(zhǔn)和設(shè)計也已經(jīng)在業(yè)界得到了較多的實(shí)踐;在松耦合的構(gòu)件技術(shù)基礎(chǔ)上形成的集成思路和實(shí)現(xiàn)得到了公認(rèn)。
構(gòu)件技術(shù)是伴隨軟件復(fù)用技術(shù)成長起來的,是支持軟件復(fù)用的核心技術(shù),其發(fā)展迅速并受高度重視,軟件構(gòu)件技術(shù)有望從根本上解決“手工作坊”式的軟件開發(fā)問題,實(shí)現(xiàn)軟件開發(fā)的產(chǎn)業(yè)化。
[1]賀秋芳.基于構(gòu)件的軟件復(fù)用技術(shù)[J].廣東輕工職業(yè)技術(shù)學(xué)院學(xué)報,2005,9(03):31-33.
[2]翟廣宇.軟件構(gòu)件技術(shù)在管理信息系統(tǒng)中的應(yīng)用[J].蘭州工業(yè)高等??茖W(xué)校學(xué)報,2004,38(03):35-38.
[3]賈巖.基于構(gòu)件的軟件工程技術(shù)研究[J].同濟(jì)大學(xué)軟件學(xué)院,2011,(06):57-58.
[4]楊璇.基于構(gòu)件的軟件設(shè)計方法在解決MIS系統(tǒng)開發(fā)和維護(hù)敏捷性特征中的應(yīng)用[J].新疆大學(xué)學(xué)報(自然科學(xué)版),2003,89(01):67-70.
[5]熊興無.構(gòu)件復(fù)用技術(shù)的研究[J].江西省科學(xué)技術(shù)情報研究所,2011,(12):107-109.
[6]韋加強(qiáng),潘蔭榮.基于J2EE平臺和MVC模型的電子政務(wù)系統(tǒng)的設(shè)計[J].綿陽師范學(xué)院學(xué)報,2005,(05):34-37.
[7]楊敬君.基于構(gòu)件的軟件復(fù)用技術(shù)研究與應(yīng)用實(shí)踐[J].大連海事大學(xué),2009,(08):55-59.
[8]向偉,蒲國林,楊清平,等.面向服務(wù)架構(gòu)的異構(gòu)系統(tǒng)集成模型[J].四川文理學(xué)院,2011,20(01):22-26.
[9]魯亞林,傅鸝.面向服務(wù)的企業(yè)應(yīng)用集成探討[J].現(xiàn)代計算機(jī),2006,(11):15-18.
[10]段學(xué)東,汪汝.基于J2EE多層框架的在線考試系統(tǒng)研究[J].計算機(jī)與數(shù)字工程,2008,36(10).
[11]張興科.基于J2EE的框架技術(shù)研究與應(yīng)用[J].計算機(jī)與數(shù)字工程,2011,39(6).
[12]董文,譙石,劉敏,等.基于J2EE平臺的電子政務(wù)系統(tǒng)的設(shè)計[J].文教資料,2007,(01):218-219.